在Realm中删除似乎令人难以置信的未被记录......或者我错过了什么?如何从列表中删除对象?示例在哪里?
我有一个带有List的对象A. 我有另一个对象B也有一个List C有一个参考备份到它的父A
我想删除一个B及其所有子对象C.如果我删除一个CI想要从它的父集合A中删除它.
我很难过......并且发现Realm docs只提供两个例子令人难以置信:
try! realm.write {
realm.delete(cheeseBook)
}
try! realm.write {
realm.deleteAll()
}
Run Code Online (Sandbox Code Playgroud)
首先,您不应该需要手动实现从子级到其父级的引用.Realm实现了一种反向关系功能,允许子对象自动查找它们所属的对象.
class C: Object {
let parent = LinkingObjects(fromType: A.self, property: "c")
}
Run Code Online (Sandbox Code Playgroud)
Realm还不支持级联删除(这里有一个问题)因此仅仅删除顶级对象并期望该对象List属性中的任何对象也被删除是不够的.有必要直接捕获这些对象,并在删除其父对象之前手动删除它们.
let childObjects = b.subObjects
try! realm.write {
realm.delete(childObjects)
realm.delete(b)
}
Run Code Online (Sandbox Code Playgroud)
(那应该可以工作,但如果没有,请将所有子对象复制到普通的Swift数组,然后从那里执行)
如果您Object完全删除它,它也将从任何List实例中删除,因此删除C应自动删除其在A中的引用.
对不起,你遇到了麻烦!我已经记录了一个问题,表明有关从Realm删除对象的文档已经过审核和改进.:)