2013-09-20 55 views
1

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

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

回答

1

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

的SQL存储,而另一方面,编译谓词和排序描述符SQL和评估结果在数据库本身。这样做主要是为了性能,但它意味着,评估发生在非可可的环境,所以那种依靠可可不能工作

描述符(或谓语)你将不得不使用 - [NSSortDescriptor sortDescriptorWithKey:升序:]方法。

基于块的方法可以用于在存储器中的对象排序阵列和其他和我想从存储器的二进制核心数据存储中的对象在技术上也是在存储器

+0

我明白了。谢谢。那么我怎么能得到我提取物体的降序? – user1529956

+1

对于NSFetchchedResultsController的NSFetchRequest:只需要fetchRequest.sortDescriptors = @ [[NSSortDescriptor sortDescriptorWithKey:@“myKey”ascending:NO]];在哪里@“myKey”是你想要降序排序的关键 – dmpontifex

+0

@dmpontikfex哇谢谢!我不敢相信我没有尝试过。我认为设置升序为NO会根据对象被提取的顺序产生一个随机顺序。 – user1529956