Core data 使用NSFetchedResultsController按可转换属性排序核心数据对象

Core data 使用NSFetchedResultsController按可转换属性排序核心数据对象,core-data,nsfetchedresultscontroller,Core Data,Nsfetchedresultscontroller,我在UITableView中显示存储在核心数据中的对象,但按对象的可转换属性之一对这些对象进行排序时遇到问题。我应该指出,我正在使用NSFetchedResultsController作为核心数据存储和表视图之间的控制器。当我简单地使用数组保存所有对象时,我可以毫无问题地对它们进行排序。我使用FRC是因为我需要将数据分组到具有节标题的节中,FRC使这非常容易 让我们称这些对象为我正在对测量对象进行排序。每个测量对象都有一个距离属性。该距离属性属于自定义类EPHDistance,因此它在核心数据模

我在UITableView中显示存储在核心数据中的对象,但按对象的可转换属性之一对这些对象进行排序时遇到问题。我应该指出,我正在使用NSFetchedResultsController作为核心数据存储和表视图之间的控制器。当我简单地使用数组保存所有对象时,我可以毫无问题地对它们进行排序。我使用FRC是因为我需要将数据分组到具有节标题的节中,FRC使这非常容易

让我们称这些对象为我正在对测量对象进行排序。每个测量对象都有一个距离属性。该距离属性属于自定义类EPHDistance,因此它在核心数据模型中设置为可转换属性

长话短说,按距离对测量对象进行排序确实有效,但只有在我编辑了由核心数据存储的对象后,或者在存储中添加了新对象后,才有效。编辑存储并返回到我的表(该表按顺序列出了所有测量对象)后,一切都很顺利。这只是表视图的初始启动和查看,对象没有正确排序。实际上,我已经在我的EPPDistance-compare:method中放置了一条NSLog语句,在我对对象进行排序时不会调用它,直到我在核心数据存储中添加/编辑一个对象。值得一提的是,如果我按照这些度量对象的日期属性(NSDate)对它们进行排序,它在一开始就非常有效

我对核心数据不是很有经验,这是我第一次真正尝试使用NSFetchedResultsController,所以对此我有点困惑。如有任何意见,将不胜感激

非常感谢,
Erik

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

您不能随意向NSManagedObject子类添加一个方法,然后在SortDescriptor中使用该方法。进一步调查后,您无法基于可转换属性对NSManagedObject进行排序。为什么在我更新数据存储之后,按可转换属性排序会起作用,这让我感到困惑。看起来我必须取出所有我想要查看的对象,并将它们存储在一个数组中,然后按照这种方式对它们进行排序。不知道我将如何处理创建表的部分。。。不过,感谢您的尝试:我使用此方法提供表节名称。我认为它也会起作用。太糟糕了。