如何在Core Data中查询/过滤多对多关系

时间:2010-05-19 16:02:28

标签: iphone core-data

我的数据模型中有Customer,Event和Address对象。客户和地址都与事件有一对多的关系。

通过这样做,我可以获得客户事件的明确地址列表:

NSSet *addressSet = [customer valueForKeyPath:@"events.address"];

对于我现在正在处理的UI部分,我需要显示之前具有地址的最近事件的地址。

我开始沿着创建NSFetchRequest的路径,设置它的实体,排序描述符,谓词然后循环结果,但它看起来像很多代码。我是否错过了对Customer对象的“事件”关系进行过滤/排序的一些明显方法,还是创建了NSFetchRequest最佳解决方案?

1 个答案:

答案 0 :(得分:1)

这实际上非常简单,因为NSSetNSArray上提供了KVO和KVC访问器。

NSSet *eventsWithAddress = [[customer valueForKey:@"events"] filteredSetWithPredicate:[NSPredicate predicateWithFormat:@"address != nil"]];
id mostRecentEvent = [eventsWithAddress valueForKeyPath:@"@max.lastDate"];

当然,属性名称取决于您,因为我看不到您的数据模型,但这可以让您大致了解代码的位置。您可以在Apple的文档中查看可用的运算符。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/ArrayOperators.html

警告:在StackOverflow注释窗口中编写的代码,因此您很可能需要稍微调整一下。