我有NSFetchedResultsController
返回带有index
属性的对象,index
属性是NSString
,例如我有index
属性的这些值: - 1,-3,1,0,-2,3
我需要定义NSSortDescriptor,它会根据index
属性值对这些对象进行排序:
-3,-2,-1,0,1,3
我现在有的排序描述符没有正确排序负值。
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:ObjectIndex ascending:YES selector:@selector(localizedStandardCompare:)];
答案 0 :(得分:1)
根据Apple Docs,CoreData的SQLite后备存储仅支持少数排序选择器:
...另一方面,SQL存储将谓词和排序描述符编译为SQL,并在数据库本身中评估结果。这主要是为了提高性能,但这意味着评估是在非Cocoa环境中进行的,因此依赖Cocoa的排序描述符(或谓词)无法工作。支持的排序选择器是比较:和 caseInsensitiveCompare:, localizedCompare:, localizedCaseInsensitiveCompare:,以及 localizedStandardCompare :(后者是类似Finder的排序,大多数人应该在大多数时间使用它。)
(我的突出)。这些都没有实现你想要的。正如你所发现的那样,它们中的最后一个最接近:它在正数之前对负数进行排序,并且确实尝试数字排序(因此" 23"在" 220&#34之前排序; - 文本排序将把它们放在另一边)。但是(奇怪的)负数按其绝对值的顺序排序 - 所以" -1"来之前" -2"等等,Finder以同样的方式对负数进行排序。
所以我认为你最好的办法是重新设计你的数据库,使这个字段成为一个数字类型,这样你就可以使用合理的排序顺序。