如何在 Realm 中删除对象?

11
在Realm中,删除操作似乎没有得到足够的文档支持......或者是我遗漏了什么?如何从列表中删除对象?有示例吗?
我有一个具有列表的A对象。 我还有另一个具有列表的B对象。 C具有对其父A的引用。
我想删除B及其所有子对象C。如果我删除C,我也希望将其从其父集合A中移除。
我感到困惑......并且发现Realm文档只提供了两个示例,这令人难以置信:
try! realm.write {
  realm.delete(cheeseBook)
}
try! realm.write {
  realm.deleteAll()
}
2个回答

15

首先,您不应该需要手动实现从子级到其父级的引用。Realm 实现了逆向关系功能,使得子对象可以自动查找它们所属的对象。

class C: Object {
    let parent = LinkingObjects(fromType: A.self, property: "c")
}

目前Realm还不支持级联删除(这里有一个相关的问题),所以仅仅删除一个顶层对象是不够的,期待该对象中的List属性中的任何对象也被删除。需要直接捕获这些对象并在删除其父对象之前手动删除它们。

let childObjects = b.subObjects
try! realm.write {
    realm.delete(childObjects)
    realm.delete(b)
}

(这应该有效,但如果不行,请将所有子对象复制到普通Swift数组中,然后再从那里操作)

如果您直接删除一个Object对象,那么它也会从任何List实例中删除,因此删除C应自动删除A中对其的引用。

很抱歉您遇到了困难!我已经记录了一个问题建议审核和改进有关从Realm中删除对象的文档。 :)


2
哇,七个月过去了,仍然没有任何改善 :( - imobilizer
1
它目前不是我们的高优先级功能。但请随意在 GitHub 问题跟踪中发表意见,以支持该功能。 :) https://github.com/realm/realm-cocoa/issues/1186 - TiM

4

谢谢你。太聪明了! - J Arango

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接