NSFetchedResultsController按一对多关系排序

问题描述:

我在CoreData中有三种对象类型; ObjectA,ObjectB和ObjectC。这些对象与一个一对多的关系,这样的关系:NSFetchedResultsController按一对多关系排序

[ObjectA]--E[ObjectB]--E[ObjectC]

我尽力去完成什么,是做一个NSFetchedResultsController在对象A的属性组合,并通过ObjectC一个属性排序。

这种排序应该如何工作: - 在ObjectC中有一个日期属性;最近更新时间。 ObjectA将连接到几个ObjectC,并通过几个lastUpdated。 - 我的NSFetchedResultsController将显示ObjectA,按这些lastUpdated排序。 - 具有最新更新的ObjectC的ObjectA应首先显示。 - 我只是感兴趣的ObjectA ObjectC与最新lastUpdated值。

这可能与NSFetchedResultsController和CoreData?

我认为一种替代方法是在ObjectA上创建一个NSFetchedProperty以重新映射到ObjectC,但这可能不是一个更好的解决方案。

您将无法使用单个NSFetchRequest来做到这一点。您可以通过使用NSExpression s和setPropertiesToFetch:来关闭,但不完全,因为您无法在键值编码中嵌套集合运算符。

最好的办法是在ObjectA上创建一个NSFetchedProperty,该ObjectA通过最近的lastUpdated获取关联(通过ObjectB)ObjectC。为了实现这个目的,你最好的办法是在ObjectB上创建一个NSFetchedProperty,它获得关联的ObjectC和最近的lastUpdated

+0

我现在已经尝试了'NSFetchedProperty'的方法,但它似乎没有工作。我不能在'NSFetchedResultsController'中对获取的属性进行排序我只是得到一个错误'keypath fetchedPropertyName not found in entity ' – Andi 2012-02-14 15:18:55

+0

我想你必须使它成为一个普通的属性而不是一个获取的属性,并且只要确保在关系改变时更新属性。或者,您将不得不停止使用'NSFetchedResultsController'并手动进行排序。 – yuji 2012-02-15 23:22:17