1

我正在使用 FetchedResultsController 来执行我的提取,我希望它按降序对对象进行排序。如果我在创建 NSSortDescriptor 时使用自定义比较器块,则会收到错误消息'unsupported NSSortDescriptor (comparator blocks are not supported)'。我不想获取我的项目并将它们存储在一个数组中,对它们进行排序,然后使用它们,因为这违背了使用 FetchedResultsController 的目的。如何创建一个按降序排序的 NSSortDescriptor?

另外,为什么在 NSSortDescriptor 的框架中甚至有一个方法允许使用比较器块,如果它实际上不允许使用它?还是只是您不能将它们用于获取请求?

4

1 回答 1

1

SQLite 存储不支持 NSSortDescriptor 的基于块的方法。持久存储文档(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html)有这个:

另一方面,SQL 存储将谓词和排序描述符编译为 SQL,并在数据库本身中评估结果。这主要是为了性能,但这意味着评估发生在非 Cocoa 环境中,因此依赖 Cocoa 的排序描述符(或谓词)无法工作

您将不得不使用 -[NSSortDescriptor sortDescriptorWithKey:ascending:] 方法。

基于块的方法可用于对数组和其他内存对象进行排序,我认为内存是二进制核心数据存储,因为对象在技术上也在内存中

于 2013-09-20T23:39:11.780 回答