Iphone 如何查询/过滤核心数据中的多对多关系

Iphone 如何查询/过滤核心数据中的多对多关系,iphone,core-data,Iphone,Core Data,我的数据模型中有客户、事件和地址对象。客户和地址与事件都有一对多的关系 通过执行以下操作,我可以获得客户活动的不同地址列表: NSSet *addressSet = [customer valueForKeyPath:@"events.address"]; 对于我现在正在处理的UI部分,我需要显示之前最新事件中有地址的地址 我开始着手创建一个NSFetchRequest,设置它的实体、排序描述符、谓词,然后循环遍历结果,但它似乎有很多代码。我是否缺少一些明显的方式来过滤/排序客户对象的“事件”

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

通过执行以下操作,我可以获得客户活动的不同地址列表:

NSSet *addressSet = [customer valueForKeyPath:@"events.address"];
对于我现在正在处理的UI部分,我需要显示之前最新事件中有地址的地址


我开始着手创建一个NSFetchRequest,设置它的实体、排序描述符、谓词,然后循环遍历结果,但它似乎有很多代码。我是否缺少一些明显的方式来过滤/排序客户对象的“事件”关系,或者创建NSFetchRequest是最佳解决方案?

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

NSSet *eventsWithAddress = [[customer valueForKey:@"events"] filteredSetWithPredicate:[NSPredicate predicateWithFormat:@"address != nil"]];
id mostRecentEvent = [eventsWithAddress valueForKeyPath:@"@max.lastDate"];
当然,属性名称由您决定,因为我看不到您的数据模型,但这让您大致了解代码需要放在哪里。您可以在苹果的文档中看到哪些运营商可用


警告:在StackOverflow注释窗口中编写的代码,因此您很可能需要对其进行一些调整。

谢谢,这让我走上了正确的道路。我忘了filteredSetUsingPredicate。我需要添加到您的代码中的全部内容是lastDate小于当前日期/时间。接受答案(如果您认为正确:)有助于提高您在此处的声誉,以备将来提问。