Realm 是否有一些方便的方法可以删除所有具有相同属性的 RLMObject?



例如,有一个狗和一个猫对象,它们都有相同的属性"owner",如何删除数据库中所有具有相同所有者的狗和猫?我必须单独删除它们吗?这让我很困扰,因为我需要根据它们都具有的属性一次删除这么多对象。

目前没有办法实现这一目标。Realm 的集合类型都不支持使用不同类型的元素,因此您无法创建一个 RealmListResults实例来保存共享相同属性但具有不同类型的所有对象。

将来一旦 Realm 超越了这个限制,你应该能够定义一个名为Animal的超类,它有一个owner属性,使DogCat继承自Animal类,然后从Realm中删除所有从Animal继承的对象。

但是,目前即使您创建一个抽象Animal类并使DogCat都继承自Animal,如果您尝试从Realm中删除所有类型为Animal的对象,它只会删除类型实际Animal的对象,但不会删除任何类型继承自Animal的对象。

请参阅此 GitHub 问题,了解有关 Realm 中继承问题的详细信息以及一些解决方法。

试试这个

let samsPets = realm.objects(Pet.self).filter("owner.name = 'Sam'")
do {
try realm.write {
realm.delete(samsPets)
}
} catch {
print(error)
}

在这里,我们查询所有宠物,其主人的名字是山姆并删除它们。 这也可以在一个语句中完成。

这假设每只宠物都有一个对其主人的属性引用。 (即dynamic var owner: Person?)

最新更新