我正在使用FetchedResultsController来执行我的提取,我希望它按降序对对象进行排序。如果我在创建NSSortDescriptor时使用自定义比较器块,则会收到错误'unsupported NSSortDescriptor (comparator blocks are not supported)'
。我不想获取我的项目并将它们存储在一个数组中,对它们进行排序,然后使用它们,因为这违背了使用FetchedResultsController的目的。如何创建将按降序排序的NSSortDescriptor?
另外,为什么在NSSortDescriptor的框架中甚至有一个方法允许使用比较器块,如果它实际上不允许使用它?或者只是你不能将它们用于fetchrequests?
答案 0 :(得分:1)
sqlite存储不支持NSSortDescriptor的基于块的方法。持久性存储文档(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html)具有以下内容:
另一方面,SQL存储将谓词和排序描述符编译为SQL,并在数据库本身中评估结果。这主要是为了提高性能,但这意味着评估是在非Cocoa环境中进行的,因此依赖Cocoa的排序描述符(或谓词)无法工作
您必须使用 - [NSSortDescriptor sortDescriptorWithKey:ascending:]方法。
基于块的方法可以用于排序数组和其他内存对象,我认为从内存中二进制Core Data存储,因为对象在技术上也在内存中