例如,有一个狗和一个猫对象,它们都有相同的属性"owner",如何删除数据库中所有具有相同所有者的狗和猫?我必须单独删除它们吗?这让我很困扰,因为我需要根据它们都具有的属性一次删除这么多对象。
目前没有办法实现这一目标。Realm 的集合类型都不支持使用不同类型的元素,因此您无法创建一个 RealmList
或Results
实例来保存共享相同属性但具有不同类型的所有对象。
将来一旦 Realm 超越了这个限制,你应该能够定义一个名为Animal
的超类,它有一个owner
属性,使Dog
和Cat
继承自Animal
类,然后从Realm
中删除所有从Animal
继承的对象。
但是,目前即使您创建一个抽象Animal
类并使Dog
和Cat
都继承自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?
)