为什么清除领域表的内容会使对象失效?

时间:2016-06-28 06:42:01

标签: 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似乎删除了我的对象(即表),但我只想清除所有数据。我怎么能绕过这个?

1 个答案:

答案 0 :(得分:0)

Realm正在使用零拷贝方法,您可以在其中检索直接访问内存映射数据而不是副本的实时更新对象访问器。

根据错误消息,我假设favouritesArray中的对象是托管的Realm对象。如果是这种情况,就没有必要重新创建它们。托管对象只能在写入事务中进行修改,这意味着所有更改都是持久的。而不是尝试删除所有对象,然后重新添加收藏夹,在您的情况下,可能更容易删除不再受欢迎的对象

如果此数组包含尚未添加到Realm的独立对象和已添加到Realm的托管对象,则add(:_ update: true)可以方便添加或更新对象(如果它们具有主键)