删除Realm中的对象并保持tableview同步

时间:2016-12-29 15:53:38

标签: swift uitableview realm

我想知道我在这里做错了什么。

有两个基本的viewControllers:tableView和detailView。

如果数据被修改,我订阅了重新加载tableView的通知。我可以修改detailViewController中的记录,并反映更改。甚至从tableView中删除一条记录,它也有效。

但我还想在detailView上添加一个删除按钮,但是viewController和Realm不同步并崩溃。 'RLMException',原因:'对象已被删除或无效。'。下次加载应用程序时,记录将被删除,因此可以正常运行。

如何删除不同viewController中的对象并更新tablieView控制器?

class TableViewController: UITableViewController {
    var token:NotificationToken?
    var expenses: Results<Expense> {
    get {
        let realm = try! Realm()
        return realm.objects(Expense.self)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let realm = try! Realm()
        token = realm.addNotificationBlock { [weak self] notification, realm in
        DispatchQueue.main.async {
            self?.tableView.reloadData()
        }
    }
}

class DetailViewController {
     func deleteButtonTapped() {
         let realm = try! Realm()
         if let expense = self.expense {
             try! realm.write {
             realm.delete(expense)
         }
         // crashes during load
         performSegue(withIdentifier: "unwindToExpensesTable", sender: self) 
    }
}

1 个答案:

答案 0 :(得分:1)

确保您不保留对已删除的Expense对象的任何引用。删除对象后,请清除DetailViewController中可能包含的任何引用,同时确保它不在某个位置,您可以再次访问它。