2016-12-29 68 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中的任何引用,並確保它不在數組中某處,您可能會再次訪問它。