在 Core Data 中获取过滤的关系

Posted

技术标签:

【中文标题】在 Core Data 中获取过滤的关系【英文标题】:Get filtered relationships in Core Data 【发布时间】:2014-02-06 18:26:36 【问题描述】:

有没有办法获取核心数据实体并过滤关系?例如,如果我有一个 Parent 实体和一个 Children 实体。 Children 分配给父母。我可以得到一个Parent 实体,并且只有ChildrenBlonde 头发,即Male

我知道我可以获取所有子对象,然后在获得对象后对其进行过滤,但是如果我使用过滤结果更改分配给父对象的子对象,则会弄乱相反的结果。

【问题讨论】:

"...但是如果我使用过滤结果更改分配给父级的子级..." - 你为什么要这样做? - 您可以过滤theParent.children,或使用一些谓词“parent = ... AND hairColor = ...”对 Children 实体执行获取请求。你想达到什么目的? @MartinR 当我运行 fetch 时,我得到了所有的父母和孩子。但是我只需要父母反对特定的孩子。因此,我通常在孩子身上运行filterArrayWithPredicate 以获得我需要的孩子,然后将theParents.children 设置为过滤后的结果。这样做会破坏逆向。 theParent.children 设置为过滤结果可能是个坏主意。您可以使用自定义方法(如下面的答案),或者在 Core Data 模型检查器中定义“获取的属性”。我没有获取属性的实际经验,但根据文档,它们的优点是结果被缓存。 【参考方案1】:

您可以轻松过滤子项或使用谓词准备获取请求,该谓词将为您执行正确的查询。

如果你想把它放在你的对象中,你可以在Parent的类别中添加一个方法,它会为你过滤它,而不是弄乱关系:

- (NSSet *)childrenMaleAndBlonde 
   return [self.children filteredSetUsingPredicate:...];

当您以这种方式过滤时,关系不会中断。

【讨论】:

这实际上是完美的。我通过使用 NSSet 在模型内部设置属性而不是使用进行过滤的方法来做到这一点。

以上是关于在 Core Data 中获取过滤的关系的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Core Data 中获取关系数据吗

在 Core Data 中获取具有关系的实体

在 Core Data 中有效地获取一对多关系中的最新记录

在 Swift Core Data 中从一对多关系中获取对象

如何获取 Core Data 中的关系项属性?

Core Data 获取关系对象