gpt4 book ai didi

Swift Realm 删除对象错误-写入事务

转载 作者:行者123 更新时间:2023-11-28 07:25:40 25 4
gpt4 key购买 nike

我正在删除一个 Realm 对象并收到此错误:

由于未捕获的异常“RLMException”而终止应用程序,原因:“只能在写入事务的 Realm 中添加、删除或创建对象 - 首先在 RLMRealm 实例上调用 beginWriteTransaction。”

我试过refresh()

extension Realm {
func addWord(_ word: RelatedWord) {
do {
try self.write {
self.add(word)
}
} catch let error {
print(error.localizedDescription)
}
}

func deleteWord(_ word: RelatedWord) {
BG {
do {
self.beginWrite()
self.delete(word)
try self.commitWrite()
//self.refresh()
} catch let error {
print(error.localizedDescription)
}
self.refresh()
}
}
}

VC:
realm.delete(word)

预期结果:滑动以从 tableview 中删除对象

错误:未正确处理对象删除。

*** 由于未捕获的异常“RLMException”而终止应用程序,原因:“只能在写入事务中的 Realm 中添加、删除或创建对象 - 首先在 RLMRealm 实例上调用 beginWriteTransaction。”

我认为问题不在于我删除 Realm 对象的函数,而是 Realm 对象与试图访问已删除对象的 TableView 之间存在不一致。

// Swipe to delete cell and word
func tableView(_ tableView: UITableView,trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

let action = UIContextualAction(style: .normal, title: "Delete", handler: { (action, view, completionHandler) in
// Update data source when user taps action

let letters = DataSingleton.shared.relatedArr.keys.sorted()
if let data = DataSingleton.shared.relatedArr[letters[indexPath.section]]?.sorted(by: {$0.word < $1.word}) {
let word = data[indexPath.row]
print(word.word)
self.realm.delete(word)


tableView.beginUpdates()
tableView.deleteRows(at: [indexPath], with: .fade)
tableView.reloadRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
}

completionHandler(true)
})

最佳答案

我不确定 BG 是什么,但我会这样做:

func deleteWord(_ word: RelatedWord) {
do {
try self.write {
self.delete(word)
}
} catch let error {
print(error.localizedDescription)
}
self.refresh()
}

关于Swift Realm 删除对象错误-写入事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678337/

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