Realm中的删除似乎难以置信......或者我错过了什么?如何从列表中删除对象?示例在哪里?
我有一个带有List的对象A. 我有另一个对象B也有一个List C有一个参考备份到其父A
我想删除一个B及其所有子对象C.如果我删除了一个C,我想将它从父集合A中删除。
我很难过......并且发现Realm docs只提供两个例子令人难以置信:
try! realm.write {
realm.delete(cheeseBook)
}
try! realm.write {
realm.deleteAll()
}
答案 0 :(得分:9)
首先,你不应该手动实现从孩子到父母的引用。 Realm实现了an inverse relationship功能,允许子对象自动查找它们所属的对象。
class C: Object {
let parent = LinkingObjects(fromType: A.self, property: "c")
}
Realm还不支持级联删除(那里有an issue for it here)因此仅仅删除顶级对象并期望List
属性中的任何对象都不够对象也被删除。必须直接捕获这些对象,然后在删除其父对象之前手动删除它们。
let childObjects = b.subObjects
try! realm.write {
realm.delete(childObjects)
realm.delete(b)
}
(那应该可行,但是如果它没有,则将所有子对象复制到普通的Swift数组,然后从那里进行)
如果您完全删除Object
,它也会从任何List
实例中删除,因此删除C应自动删除其在A中的引用。
抱歉,您遇到了麻烦!我已经记录了一个问题,表明有关从Realm删除对象的文档已经过审核和改进。 :)
答案 1 :(得分:0)
在Swift 4中有一个Realm扩展用于级联删除。您可以在GitHub Link->(https://gist.github.com/verebes1/02950e46fff91456f2ad359b3f3ec3d9)中找到它。在您的代码中添加此扩展名后,使用它就像在delete方法上标记一个标志一样简单。
realm.delete(object, cascading: true)