我想知道我在这里做错了什么。
有两个基本的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)
}
}
答案 0 :(得分:1)
确保您不保留对已删除的Expense
对象的任何引用。删除对象后,请清除DetailViewController
中可能包含的任何引用,同时确保它不在某个位置,您可以再次访问它。