CoreData获取请求 - 获取具有关系的所有对象

时间:2013-06-10 16:29:07

标签: ios core-data nspredicate nsfetchrequest

我有3个实体:

Topic <--->> subTopic <--->> Certificate.

我想要的是所有主题的列表,其中存在证书(没有重复项)。基于我的初步阅读(主要是这个问题:CoreData performance: predicate on more to-many relationships)我得出结论,最有效的方式(假设可能)是从证书级别开始,并从证书列表中获取主题列表。

但就我而言。我如何指定当我想要一个主题列表时,我想要的列表将基于所有证书?是否可以为fetchrequest指定可以返回主题列表的谓词。

有没有一种方法可以做到这一点,而无需手动跟踪每个证书的关系,只是将找到的主题添加到NSSet或其他什么内容?

感谢任何指示(或同样 - 建议告诉我不要再傻了,这就是我应该这样做的方式!)

2 个答案:

答案 0 :(得分:1)

我目前无法对此进行测试,但使用此谓词的Topic实体上的获取请求应该有效:

[NSPredicate predicateWithFormat:@"SUBQUERY(subtopics, $s, ANY $s.certificates != NULL).@count > 0"]

答案 1 :(得分:1)

获取所有类别,无论您想要什么,都不需要谓词,因为您需要所有类别。然后得到这样的主题(假设合理的关系名称):

NSArray *topics = [[categories valueForKeyPath:@"@distinctUnionOfObjects.subtopic"] valueForKeyPath:@"@distinctUnionOfObjectstopic"];