嵌套核心数据获取

时间:2013-12-02 19:03:05

标签: ios cocoa-touch core-data nsfetchrequest

我有一个包含多个实体的核心数据DB。有一个名为“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);

    }

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

2 个答案:

答案 0 :(得分:2)

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

- (void)filterPersonByType:(NSString *)typeName {

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

答案 1 :(得分:0)

是的,您可以在NSPredicate中使用点表示法。您可能希望将类型设置为实际类型,这比仅仅进行字符串比较更清晰。