NSFetchedResultsController对负数字符串值进行排序

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

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

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

(我强调)。 这些都没有达到你想要的。 正如你发现的那样,它们中的最后一个最接近:它在正数之前排序负数,并且尝试数字排序(因此“23”在“220”之前排序 - 文本排序会使它们反过来)。 但是(奇怪的是)负数按照它们的绝对值排序 - 所以“-1”在“-2”之前等。果然,Finder以相同的方式对负数进行排序。

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

链接地址: http://www.djcxy.com/p/36137.html

上一篇: NSFetchedResultsController sort negative string values

下一篇: UISearchDisplayController + NSFetchedResultsController update footerView