前提
XcodeでtTodoアプリをrealmを使ってアプリを作っていますが、
tableViewのcellをスワイプして削除したいがエラーが発生した
実現したいこと
スワイプして左あるいは削除を押すとcellを消えるようにしたい
発生している問題・エラーメッセージ
"Invalid update: invalid number of rows in section 0.
該当のソースコード
Xcode
1 override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 2 if editingStyle == .delete { 3 try! realm.write { 4 tableView.deleteRows(at: [indexPath], with: .fade) 5 realm.delete(itemList[indexPath.row]) 6 tableView.reloadData() 7 } 8 tableView.reloadData() 9 } 10 11 }
試したこと
ネットで検索をしたのですが、tableViewをリロードしてくださいとあり
解決しておられましたが、同じようにtableView.reloadData()を記述していますが、
エラーが解消されません
補足情報(FW/ツールのバージョンなど)
Xcode Version 14.0.1 (14A400)
ここにより詳細な情報を記載してください。
import UIKit import RealmSwift class ItemTableViewController: UITableViewController { let realm = try! Realm() let item = TodoItem() var itemList: Results<TodoItem>! var token: NotificationToken! override func viewDidLoad() { super.viewDidLoad() tableView.register(UINib(nibName: "ItemTableViewCell", bundle: nil), forCellReuseIdentifier: "checkListCell") itemList = realm.objects(TodoItem.self).sorted(byKeyPath: "name") token = realm.observe{notification,realm in self.tableView.reloadData() } } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return itemList.count } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { try! realm.write { tableView.deleteRows(at: [indexPath], with: .fade) realm.delete(itemList[indexPath.row]) tableView.reloadData() } tableView.reloadData() } } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 80 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "checkListCell", for: indexPath) as! ItemTableViewCell let item = itemList[indexPath.row] if item.done == false { cell.checkImageView?.image = UIImage(named: "Image") }else{ cell.checkImageView.image = UIImage(named: "check") } cell.nameLabel.text = item.name return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ if let item = itemList?[indexPath.row] { do { try! realm.write { item.done = !item.done } } } tableView.reloadData() } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。