嵌套核心数据获取
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 错误