嵌套核心数据提取

我有一个核心数据数据库与多个实体。 有一个称为“人”的父实体有很多“朋友”,“朋友”有很多“活动”,“活动”有“types”(“types与”活动“有多对多的关系)。尝试实现是通过“Types”过滤所有的“Person”实体,用户将敲击“Type”,然后刷新我的表并过滤“Types”显示的“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); } 

这将正确输出值,但我需要使用这些值筛选我的表。 我怎样才能做到这一点?

似乎我知道了。 使用NSPredicate,您可以使用点符号来像这样遍历深度关系。 我的实施如下:

 - (void)filterPersonByType:(NSString *)typeName { NSPredicate *typePredicate = [NSPredicate predicateWithFormat:@"ANY friends.activities.type.name CONTAINS[cd]%@", typeName]; } 

是的,您可以使用点符号与NSPredicate。 你可能想让这个types成为一个实际的types,但是这样做比只进行string比较要干净。