swift - 为什么清除 Realm 表的内容会使对象失效?

标签 swift realm delete-row

我有一个收藏夹表,我想要做的是清除表中的所有数据,然后使用数组的内容重新加载它。这是代码:

//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/

相关文章:

ios - 从 Realm 对象的主键获取单个对象

ios - 知道 Realm Collection Change 通知中对象的哪个元素发生了变化?

ios - [UIViewController TableView :numberOfRowsInSection:]: unrecognized selector sent to instance

ios - UIAlertAction 值列表

c - Swift无法从linphone sdk中的c回调中调用自己

ios - 删除动画不显示

python - 从 dataframe pandas python 中删除一个例子

swift - 由于其自身文件的私有(private)保护级别,结构初始值设定项无法访问

swift - Swift 3.1 Realm - 命令因信号 : Illegal instruction: 4 而失败

R - 删除连续(仅)重复项