父对象与自己的孩子有很多关系。
当我获取对象的所有子节点时,请求也通过反向关系返回父对象。
在获取请求中是否有一种方法可以排除反向关系,以便结果只包含子对象?
到目前为止,我的解决方案是在Object的自定义NSManagedObject类中实现一个方法,该方法返回子元素的过滤数组。
-(NSArray *)getChildrenOfObjectWithoutParent:(int)parentId
{
NSArray *results = [[self.children allObjects] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(objId != %d)", parentId]];
return results;
}
答案 0 :(得分:2)
更清洁的解决方案是建立两种关系:
children
to-many 从对象到自身parent
作为 to 从对象到自身的关系并将它们定义为互逆关系。
然后self.children
准确地给出了子对象,没有任何问题或技巧。
(我假设你的描述中一个对象只能有一个父对象。如果一个对象有多个父对象,你可以将parent
定义为 to-many 关系。)
此设置的另一个优点是您可以为关系定义不同的核心数据“删除规则”。
一个有用的例子是:
children
关系的规则“Cascade”和parent
关系的规则“Nullify”。效果是如果删除一个对象,它的所有子对象也会自动删除,并从父对象子对象中删除该对象。