NSFetchedResultsController排序负字符串值

时间:2015-03-09 09:26:11

标签: ios sorting nsfetchedresultscontroller nssortdescriptor

我有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:)];

1 个答案:

答案 0 :(得分:1)

根据Apple Docs,CoreData的SQLite后备存储仅支持少数排序选择器:

  

...另一方面,SQL存储将谓词和排序描述符编译为SQL,并在数据库本身中评估结果。这主要是为了提高性能,但这意味着评估是在非Cocoa环境中进行的,因此依赖Cocoa的排序描述符(或谓词)无法工作。支持的排序选择器是比较: caseInsensitiveCompare: localizedCompare: localizedCaseInsensitiveCompare:,以及 localizedStandardCompare :(后者是类似Finder的排序,大多数人应该在大多数时间使用它。)

(我的突出)。这些都没有实现你想要的。正如你所发现的那样,它们中的最后一个最接近:它在正数之前对负数进行排序,并且确实尝试数字排序(因此" 23"在" 220&#34之前排序; - 文本排序将把它们放在另一边)。但是(奇怪的)负数按其绝对值的顺序排序 - 所以" -1"来之前" -2"等等,Finder以同样的方式对负数进行排序。

所以我认为你最好的办法是重新设计你的数据库,使这个字段成为一个数字类型,这样你就可以使用合理的排序顺序。