iphone - 从核心数据获取请求中排除反向关系

标签 iphone objective-c ios cocoa core-data

Parent Object 与其子对象有很多关系。

Core Data Model

当我获取一个对象的所有子对象时,请求还通过反向关系返回父对象。

有没有办法在获取请求中排除反向关系,以便结果只包含子对象?

到目前为止,我的解决方案是在 Object 的自定义 NSManagedObject 类中实现一个方法,该方法返回经过过滤的子数组。

-(NSArray *)getChildrenOfObjectWithoutParent:(int)parentId
{
    NSArray *results = [[self.children allObjects] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(objId != %d)", parentId]];
    return results;
}

最佳答案

更简洁的解决方案是建立两个关系:

  • children 作为从 Object 到自身的对多关系,
  • parent 作为对象到自身的一对一关系

并将这些定义为相互反向关系。

然后 self.children 准确地给出子对象,没有任何问题或技巧。

enter image description here

(根据您的描述,我假设一个对象只能有一个父对象。如果一个对象有多个父对象,您也可以将 parent 定义为对多 关系。 )

此设置的另一个优点是您可以为关系定义不同的核心数据“删除规则”。

一个有用的例子是:

  • children 关系删除规则“Cascade”,并且
  • 删除 parent 关系的规则“Nullify”。

效果是,如果一个对象被删除,它的所有子对象也被自动删除,并且该对象从父对象子对象中移除。

关于iphone - 从核心数据获取请求中排除反向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826301/

相关文章:

iphone - UITableViewCell 的宽度

iphone - 将项目移至新项目的最佳方式

iphone - UIButton 不显示 iOS6 中的文本

iphone - 当应用程序进入后台并返回时,我的 NSRunLoop 和计时器会发生什么情况?

ios - 如何在#define中将整个数组作为参数传递?

ios - 为 TableView 中的单元格获取行触摸 UILabel

ios - 如何使用 sharekit API 登录 Facebook?

ios - 从 Objective-C 类调用 Swift 方法的语法

iphone - 我需要将两个 NSArray/NSDictionaries 组合在一起

iPhone - 带有双引号转义字符的 Localizable.strings