在领域

时间:2018-05-02 09:41:56

标签: ios swift realm

我从领域加载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]
}

当领域删除此项目时崩溃了。

我收到错误消息原因:'对象已被删除或无效。'

我很困惑,这在其他视图控制器上工作正常。

为什么不在这里工作?

编辑----------

解决了这个问题。

因为删除此项后,我有一个使用此项的日志功能。 这就是它总是崩溃的原因。

谢谢大家

1 个答案:

答案 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)
}