嵌套核心数据获取

Posted

技术标签:

【中文标题】嵌套核心数据获取【英文标题】:Nested core data fetch 【发布时间】:2013-12-02 19:03:04 【问题描述】:

我有一个包含多个实体的核心数据数据库。有一个名为“Person”的父实体,它有很多“朋友”,“朋友”有很多“活动”,“活动”有“类型”(“类型”与“活动”有一对多关系)。我试图实现的是通过“类型”过滤所有“人”实体。用户将点击“类型”,然后我会刷新我的表格并过滤由“类型”显示的“人”实体与他们相关的。

目前我在想我必须使用复合谓词,但我完全确定如何去做。到目前为止,我所做的只是通过像这样循环遍历我的 fetchedObjects 来打印出我想要的值:

NSArray *persons = self.fetchedResultsController.fetchedObjects;


    for (JIPerson *person in persons) 
        JIFriend *friend = person.friends.anyObject;
        JIActivity *activity = friend.activities.anyObject;
        JIType *type = activity.type;
        NSLog(@"%@", type.name);

    

这会正确打印出值,但我需要使用这些值过滤我的表。我怎样才能做到这一点?

【问题讨论】:

我能否使用如下谓词遍历 Core Data 关系树:[@"person.friend.activity.type.name == %@", nameValue]? 【参考方案1】:

好像我明白了。使用 NSPredicate,您可以使用点符号遍历这样的深层关系。我的实现如下:

- (void)filterPersonByType:(NSString *)typeName 

    NSPredicate *typePredicate = [NSPredicate predicateWithFormat:@"ANY friends.activities.type.name CONTAINS[cd]%@", typeName];

【讨论】:

【参考方案2】:

是的,您可以在 NSPredicate 中使用点表示法。不过,您可能希望类型为实际类型,这比仅进行字符串比较更简洁。

【讨论】:

以上是关于嵌套核心数据获取的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 嵌套到核心数据和 ObjectForKey 错误

核心数据,嵌套列表

NSPredicate 嵌套字典动态键

Cloudera Navigator API 无法获取嵌套数据

GraphQL 在嵌套图中获取子边的附加数据

使用React-Native从嵌套JSON获取数据