2016-12-29 63 views
1

我想了解我在这里做错了什么。删除Realm中的对象并保持tableview同步

有两个基本的viewController:一个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

您是否在'DetailViewController'中保留对'费用'的引用?删除对象后,请确保清除对它的任何引用。 – jervine10

+0

jervine10,你是男人!它不是正在崩溃的tableViewController,它是detailView,因为它保留了引用。如果你写评论作为答案,我可以给你这个信用。 :-) – jannej

回答

1

请确保您没有保留对删除的Expense对象的任何引用。删除对象后,请清除DetailViewController中的任何引用,并确保它不在数组中某处,您可能会再次访问它。

相关问题