核心数据过滤多个实体

时间:2011-09-05 09:40:54

标签: ios core-data filtering

假设我们有一个名为“Document”的实体和另一个名为“User”的实体。存在多对多关系,因此用户可以拥有一组文档,并且每个文档可以由多个用户拥有。其他文档的属性为“type”。

现在我想用“pdf”类型获取用户x的所有文档。你会如何访问这些数据?

据我所知,有两种方法:

  1. 通过其关系(user.documents)从用户检索所有文档,并使用NSPredicate过滤数组(这是否适用于复杂对象?)。

  2. 对具有两个谓词的“Documents”实体执行获取请求。第一个指定用户,第二个负责类型。

  3. 哪种方法比较好?或者甚至有更好的方法来实现这一目标? 我想第二种解决方案要贵得多。

3 个答案:

答案 0 :(得分:3)

您的请求的实体应该是Document,您需要在谓词中使用ANY操作:

[NSPredicate predicateWithFormat: @"ANY users == %@ AND type == %@", userX, @"PDF"];

请参阅汇总操作部分:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html

答案 1 :(得分:0)

我使用Core Data超过一年但我刚开始使用关系和其他高级功能...
但是,在我看来,您可以尝试使用第一种方式并回答您的问题,我建议您仔细阅读Predicate Programming Guide

答案 2 :(得分:0)

找到最好的方法

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray of Predicates]];

您也可以根据需要使用notPredicateWithSubpredicates和orPredicateWithSubpredicates。

链接到文档http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCompoundPredicate_Class/Reference/Reference.html