我有一个收藏夹表,我想要做的是清除表中的所有数据,然后使用数组的内容重新加载它。这是代码:
//empty FavouritesRealm table and reload favouritesArray back into FavouritesRealm
let clearTable = realm.objects(FavouritesRealm)
try! realm.write{
for row in clearTable{
realm.delete(row)
}
for f in favouritesArray{
let favouriteRealm = FavouritesRealm()
favouriteRealm.name = f.name
favouriteRealm.price = f.price
favouriteRealm.dbSource = f.dbSource
favouriteRealm.date = f.date
favouriteRealm.favourite = f.favourite
realm.add(favouriteRealm)
}
}
现在,应用程序因以下评论而崩溃: “由于未捕获的异常‘RLMException’而终止应用程序,原因:‘对象已被删除或失效。’”
当所有行都被删除时,Swift 似乎会删除我的对象(即表),但我只想清除所有数据。我该如何解决这个问题?
最佳答案
Realm 使用零复制方法,您可以检索实时更新的对象访问器,这些访问器直接访问内存映射数据而不是副本。
根据错误消息,我假设 favouritesArray
中的对象是托管 Realm 对象。如果是这样的话,就没有必要重新创建它们。托管对象只能在写事务中修改,这意味着所有更改都会保留。在您的情况下,只删除不再受欢迎的对象可能会更容易,而不是尝试删除所有对象然后重新添加收藏夹
如果此数组包含尚未添加到 Realm 的独立对象和已添加到 Realm 的托管对象,则 add(:_ update: true)
可以方便地添加或者更新您的对象(如果它们有主键)。
关于swift - 为什么清除 Realm 表的内容会使对象失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38068826/