2016-10-13 49 views
0

我有三个模型,父,子,孙。我能够正确保存和链接数据。现在,我希望能够删除父对象时删除子对象和孙对象。如何删除基于特定属性的零对象

父母有孩子的财产,孩子有财产的孙子。

例子:

class Parent: Object { 
    dynamic var name = "" 
    var child = List<Child> 
} 

class Child: Object { 
    dynamic var name = "" 
    dynamic var parent: Parent? 
    var grandChild = List<GrandChild> 
} 

class GrandChild: Object { 
    dynamic var name = "" 
    dynamic var child: Child? 
} 

(这不是我的实际代码,所以如果我搞砸任何东西在这里,请忽略任何错误。)

我想什么做的是删除父,这会使Child对象中'parent'的属性为零。然后,我想删除子对象,如果它的父属性为零。然后为grandChild做同样的事情。换句话说,做一个级联删除对象。

所以,像这样:

如果对象的parent属性:儿童是零,然后删除对象。

这似乎是一个简单的问题来解决,但我无法从这些板上的Realm找到嵌套数据模型的很多示例,或者我没有以正确的方式询问问题以找到它们。

+0

我读过,支持级联删除#1104。我正在寻找解决方法,直到添加功能。 –

回答

0

目前Realm不支持级联删除,因此您必须手动删除子实例。您可以使用LinkingObjects在删除父项之前删除所有子项,或仅查询删除父项后的所有子项实例并将其删除。看到更多可能的解决方案在这里:https://github.com/realm/realm-cocoa/issues/1186

+0

你找到父母为零的对象的第二个建议是我正在寻找的东西,我找不到任何可以做到这一点的代码示例。我不像我应该那样熟悉谓词。您能否提供一个代码示例? –

+0

您的解决方案非常完美。这是我与Realm过滤工作经验不足的问题。我所做的只是让countertopsToBeDeleted = realm.objects(Countertop.self).filter(“room == nil”) 试试! realm.write { realm.delete(countertopsToBeDeleted) –