使用NSFetchedResultsController通过可转换属性对Core Data对象进行排序

时间:2011-04-04 08:15:35

标签: core-data nsfetchedresultscontroller

我在UITableView中显示存储在Core Data中的对象,并且在通过对象的可转换属性之一对这些对象进行排序时遇到问题。我应该指出,我使用NSFetchedResultsController作为Core Data存储和我的表视图之间的控制器。当我只是使用一个数组来保存我的所有对象时,我可以毫无问题地对它们进行排序。我正在使用FRC,因为我需要将数据分组在带有节标题的部分中,而FRC使这很容易。

让我们称这些对象为“测量”对象。每个Measurement对象都有一个distance属性。该距离属性属于自定义类EPHDistance,因此它在Core Data模型中设置为Transformable属性。

简而言之,按距离 对Measurement对象进行排序是有效的,但只有在我编辑了由Core Data存储的对象或者我添加了一个新对象之后商店。编辑商店并返回到我的表,按顺序列出所有的测量对象,一切都很好。它只是初始启动和查看表视图,其中对象未正确排序。我实际上在我的EPPDistance -compare:方法中放置了一个NSLog语句,当我在Core Data存储中添加/编辑对象之前对对象进行排序时,它不会被调用。对于它的价值,如果我按照它们的“日期”属性(这是一个NSDate)对这些测量对象进行排序,它就会很有效。

我对Core Data没有超级经验,这是我第一次真正尝试使用NSFetchedResultsController,所以我对此感到有些困惑。任何意见都将不胜感激。

非常感谢, 埃里克

1 个答案:

答案 0 :(得分:0)

您可以在Measurement类调用-(NSString*)distanceCompareString中创建一个可选方法,该方法返回一个字符串,帮助您从EPHDistance对象中进行排序。在NSSortDescriptor中,您只需使用distanceCompareString作为排序键。