繁体   English   中英

如何在Realm中删除对象?

[英]How to delete objects in Realm?

在Realm中删除似乎文档不足,令人难以置信……还是我错过了什么? 如何从列表中删除对象? 例子在哪里?

我有一个带有列表的对象A。 我还有另一个对象B,还有一个列表C,它的引用备份到其父A

我想删除B及其所有子对象C。如果删除CI,则也要从其父集合A中删除它。

我很困惑...并且发现Realm文档仅提供两个示例令人难以置信:

try! realm.write {
  realm.delete(cheeseBook)
}
try! realm.write {
  realm.deleteAll()
}

首先,您永远不需要手动实现从子级到父级的引用。 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 ,则该Object也将从所有List实例中删除,因此删除C应该自动删除其在A中的引用。

对不起,您遇到了麻烦! 我已经记录了一个问题,建议对有关从Realm删除对象的文档进行审查和改进。 :)

在Swift 4中有一个Realm扩展用于级联删除。您可以在GitHub链接->( https://gist.github.com/verebes1/02950e46fff91456f2ad359b3f3ec3d9 )中找到它。 在您的代码中添加此扩展名后,使用它就像在delete方法上放置一个标志一样简单。

realm.delete(object, cascading: true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM