前提・実現したいこと
ToDoアプリにて、TableViewにテキストを反映させる際にトラブルが起きる。
Index out of rangeのエラーの解消
発生している問題・エラーメッセージ
Index out of range
該当のソースコード
swift
1import UIKit 2 3class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate { 4 5 @IBOutlet var tableView: UITableView! 6 7 //todoを入れる配列 8 9 var array = [String]() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 tableView.delegate = self 14 tableView.dataSource = self 15 16 17 } 18 19 20 21 22 //セクションの数を指定 23 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 24 25 return 1 26 } 27 28 29 30 //生成したセルを順番に表示 31 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 32 33 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 34 //Table View CellのidentifireをCellとする 35 36 cell.textLabel?.text = array[indexPath.row] 37 cell.layer.backgroundColor = UIColor.clear.cgColor 38 return cell 39 } 40 41 42 //新規アイテム追加 43 @IBAction func add(_ sender: Any) { 44 45 var textField = UITextField() 46 47 let alert = UIAlertController(title: "新規作成", message: "", preferredStyle: .alert) 48 49 //現在の配列を取り出す 50 if (UserDefaults.standard.object(forKey: "todo") != nil){ 51 array = UserDefaults.standard.object(forKey: "todo") as! [String] 52 } 53 54 let action = UIAlertAction(title: "タスクを追加", style: .default) { (action) in 55 56 //既存の配列にテキストを追加して保存 57 self.array.append(textField.text!) 58 UserDefaults.standard.set(self.array, forKey: "todo") 59 self.tableView.reloadData() 60 } 61 62 63 alert.addTextField { (alertTextField) in 64 alertTextField.placeholder = "新しいアイテム" 65 textField = alertTextField 66 67 } 68 69 alert.addAction(action) 70 present(alert, animated: true, completion: nil) 71 72 73 } 74 75 76 77 //cellの高さ 78 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 79 return 70 80 } 81 82 83 //cellが消されたら 84 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 85 if editingStyle == .delete{ 86 87 //対応する配列を消す 88 array.remove(at: indexPath.row) 89 90 //新しくえデータをセットし直す 91 UserDefaults.standard.set(array, forKey: "todo") 92 93 //tableViewを更新 94 tableView.reloadData() 95 } 96 } 97 98 99} 100 101
試したこと
二つのToDoアプリを自分で切り貼りしている間に繋がりがわからなくなってきました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。