2011-09-05 69 views
0

假设我们有一个名为“Document”的实体,另一个名为“User”。有多对多的关系,用户可以拥有一组文档,每个文档可以由多个用户拥有。其他文档具有“类型”属性。对多个实体的核心数据过滤

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

至于我可以看到有两种方式:

  1. 检索用户的所有文件,其关系(user.documents)和过滤与NSPredicate阵列(做这项工作具有复杂目的?)。

  2. 用两个谓词对“文档”实体执行提取请求。第一个指定用户,第二个负责该类型。

哪种方法更好?还是有更好的方法来实现这一目标? 我想第二个解决方案要贵得多。

回答

3

您的要求的实体应该是文档,您需要使用您的谓词的任何操作:

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

查看聚合操作部分:

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

+0

这是比第一种方式更有效?再次获取用户似乎是不必要的,因为我已经有一个用户对象引用其文档。 – Dominik

+0

上面的谓词将使用单个SQL查询为您的userX获取所有PDF文档。即使你有文档的引用,但它们可能是错误的,所以过滤一个数组可能会导致每个单独文档的SQL查询被触发 - 效率更低。 –

+0

要查看执行了哪些SQL查询,请将'-com.apple.CoreData.SQLDebug 1'添加到启动参数 –

0

我我已经使用核心数据超过一年,但我刚开始使用关系和其他高级功能...
但是,在我的操作INION,你可以尝试使用第一种方式,并回答你的问题,我建议你仔细阅读Predicate Programming Guide