Realm Swift:-不允许将已删除或无效的对象添加到Realm

时间:2019-10-24 09:06:23

标签: swift realm

我在Realm DB中遇到问题, 我正在尝试删除(截断表)对象,而不是再次添加它。
但在运行时出现此异常

  

不允许将已删除或无效的对象添加到领域

let realm = try! Realm()
        let objFolder = realm.objects(FolderColor.self)
        do{

            try realm.write {
                realm.delete(objFolder)
                for obj in arrFolderColors {
                    realm.add(obj)
                }
            }
        }
        catch{}

2 个答案:

答案 0 :(得分:1)

Realm对象只是指向Realm数据库中其数据的指针。调用realm.delete时,您将从内存和磁盘中完全删除内容。 Realm对象本身仍在内存中,但是您无法调用任何属性或尝试重新添加它。

有一个object.invalidated属性,您可以在尝试将其添加到Realm之前检查对象是否已删除,以避免意外触发该异常。

我建议您重新考虑一下逻辑,无需调用“ realm.delete”。如果它在阵列中,则可以将其从阵列中删除,但将其保留在数据库中。

答案 1 :(得分:1)

我喜欢另一个答案,但我认为这里发生的是您有一个var类。

@objc dynamic var folderColorResults = Results<FolderColor>

在某些时候,您已经用一些FolderColor对象填充了该变量

self.folderColorResults = realm.objects(FolderColor.self).filter("color == 'blue'")

因此,当您调用问题中的代码时,它将删除Realm中的所有FolderColor对象-发生这种情况时,folderColorResults结果var也将得到更新(所有对象均已删除)。

因此,没有对象可以写回到磁盘。

请记住,Realm是一个实时数据库,并且Results对象始终与实际数据保持同步;在一个位置上更改一个对象,就可以在使用该对象的任何地方更改它。

建议的解决方法是将folderColorResults强制转换为数组。

let myArray = Array(self.folderColorResults)

这会将这些对象与Realm断开连接,并且将不会更新它们。

当然,在这个假设上我可能是完全错误的,因此,如果提供更多信息,我可以进一步更新。