gpt4 book ai didi

swift - 删除 Realm 中的对象并保持 TableView 同步

转载 作者:可可西里 更新时间:2023-11-01 02:09:06 24 4
gpt4 key购买 nike

我想了解我在这里做错了什么。

有两个基本的 View Controller :一个 tableView 和一个 detailView。

如果数据被修改,我正在订阅通知以重新加载 tableView。我可以从 detailViewController 修改记录,并且更改会得到反射(reflect)。甚至从 tableView 中删除一条记录,它也有效。

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

如何删除不同 viewController 中的对象并保持 tablieView Controller 更新?

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

最佳答案

确保您没有保留对已删除的 Expense 对象的任何引用。删除该对象后,清除您在 DetailViewController 中可能拥有的任何引用,还要确保它不在您可能再次访问它的某个数组中。

关于swift - 删除 Realm 中的对象并保持 TableView 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com