シミュレーターで機能が思ったように動きません
プログラミング初心者です。StackOverflowを使うのも初めてなので、うまくかけていないところがありましたら申し訳ございません。
学校のプロジェクトでアプリを作ることになったのですが、初めてなのうまくいかず困っています。皆様の力を貸していただけたらなと思います。
私が使っているのは:
Xcode Version 8.1
Swift (Swiftのバージョンについてもよくわかっていないのですが、3.0だと思います)
私が作っているアプリは To Do List で、YouTubeのチュートリアルを見て作成しています。こちらが私の見ているチュートリアルです:
https://www.youtube.com/watch?v=Md0KDy6DCAc
また、この方のフルコードが載っているサイトがこれです:
https://github.com/mobilespace/ToDoList
私が今困っているのは、シミュレーターで機能がうまく動かないことです。 To Doアイテムを選択して左上のフォルダのマークを押すと、To Do Items Completedに自動的に保存(名前がそちらに移動)される仕組みになるはずなのですが、私の場合、リストから名前が消えるだけで To Do Items Completed に保存されません。
注意マークは一つも出てないので、何が間違っているのか、またどうやったら直るのかがわかりません。
よろしくお願いします。
ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AddToDoItemControllerDelegate {
@IBOutlet weak var tableView: UITableView!
var toDoList: NSMutableArray = ["Go get groceries", "Walk the dog", "Watch a movie", "Do your homework"]
var completedToDoList: [Int:String] = [:]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
resetAccessoryType()
tableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return toDoList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoCell", for: indexPath)
cell.textLabel?.text = toDoList[indexPath.row] as? String
return cell
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func resetAccessoryType() {
for row in 0..<toDoList.count {
if let cell = tableView.cellForRow(at: IndexPath(row: row, section: 0)) {
cell.accessoryType = .none
}
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let cell = tableView.cellForRow(at: indexPath) {
if cell.accessoryType == .none {
cell.accessoryType = .checkmark
completedToDoList[completedToDoList.count] = toDoList[indexPath.row] as? String
toDoList.removeObject(at: indexPath.row)
} else {
cell.accessoryType = .none
}
}
}
func addToDoItemToList(_ text:String) {
toDoList[toDoList.count] = text
tableView.reloadData()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "AddToDoItemSegue") {
let navigationController = segue.destination as! UINavigationController
let addToDoItemViewController = navigationController.topViewController as! AddToDoItemController
addToDoItemViewController.delegate = self
} else if(segue.identifier == "CompletedToDoItemsSegue") {
let completedToDoItemsController = segue.destination as! CompletedToDoItemsController
completedToDoItemsController.completedToDoList = completedToDoList
}
}
}
CompletedToDoItemController
import UIKit
class CompletedToDoItemsController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var completedToDoList: [Int:String] = [:]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return completedToDoList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CompletedToDoItemCell", for: indexPath)
cell.textLabel?.text = completedToDoList[indexPath.row]
return cell
}
}