我从领域加载tableview数据
let tasks = realmManager.objects(ModelTask.self).filter("planId == %@", currentPlan.id)
datasource = Array(tasks)
tableViewMain.reloadData()
并在用户在tableview中单击“删除”时删除项目
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let delete = UITableViewRowAction(style: .normal, title: "删除".localized) {
[weak self] action, index in
guard let `self` = self else {return}
let task = self.datasource[indexPath.row]
let realm = try! Realm()
try? realm.write {
realm.delete(task)
}
self.datasource.remove(at: indexPath.row)
tableView.reloadData()
}
delete.backgroundColor = UIColor(hex:"fe5d5c")
return [delete]
}
当领域删除此项目时崩溃了。
我收到错误消息原因:'对象已被删除或无效。'
我很困惑,这在其他视图控制器上工作正常。
为什么不在这里工作?
编辑----------
解决了这个问题。
因为删除此项后,我有一个使用此项的日志功能。 这就是它总是崩溃的原因。
谢谢大家答案 0 :(得分:0)
试试这个
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let delete = UITableViewRowAction(style: .normal, title: "删除".localized) {
[weak self] action, index in
guard let `self` = self else {return}
let task = self.datasource[indexPath.row]
let realm = try! Realm()
try? realm.write {
realm.delete(task)
self.datasource = realmManager.objects(ModelTask.self).filter("planId == %@", currentPlan.id)
}
tableView.reloadData()
}
delete.backgroundColor = UIColor(hex:"fe5d5c")
return [delete]
}
或者,您可以在从数据源中删除之前检查isInvalidated
if !task.isInvalidated{
self. datasource.removeObject(task)
}