首页 文章

嵌套核心数据获取

提问于
浏览
0

我有一个包含多个实体的核心数据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 回答

  • 2

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

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

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

相关问题