NSSortDescriptor 可以使用部分键进行排序吗?
Posted
技术标签:
【中文标题】NSSortDescriptor 可以使用部分键进行排序吗?【英文标题】:NSSortDescriptor sorting with part of key possible? 【发布时间】:2011-02-19 07:48:11 【问题描述】:我有一个 CoreData iphone 应用程序,它有一个显示地址的视图。
地址如下所示:“5 Blob Street, 2222, Suburbia”,其中“5 Blob Street”是 address_and_number 键,“2222”是邮政编码,“Suburbia”是郊区。
目前我使用这个 NSSortDescriptor,效果很好:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"address_and_number" ascending:YES];
但是,我的客户想要按街道名称进行排序,即从 address_and_number 键中,将评估“Blob Street”。
有没有办法在不将 address_and_number 键分成两个键“address”和“number”的情况下进行这种排序?
我是否可以使用正则表达式仅获取我需要进行排序的 address_and_number 键的一部分,并以某种方式将其添加到 NSSortDescriptor 对象中?
【问题讨论】:
也许 NSComparator 会有用? 也许这是相关的:***.com/questions/3455512/… 【参考方案1】:根据Custom sorting using categories and core data - is it supported by the framework?相关问题的回答
NSFetchedResultsController 内部的排序是在持久存储级别执行的,因此如果您使用 SQLite 作为后端,它将失败。
对于这样的事情,我会去规范化数据并存储月份和日期以及实际出生日期,以便您可以对它们进行排序。
在尝试了选择器和比较器后,我使用 sqlite3 的持久级别都没有,我将 address_and_number 键拆分为 address_street_name 和 address_street_number 键,然后按 address_street_name 排序。
【讨论】:
【参考方案2】:尝试像这样在 NSSortDescriptor 的初始化中添加一个 NSComparator 块:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"Address_suburb" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2)
// do your comparison without house numbers here
// return either NSOrderedAscending, NSOrderedDescending or NSOrderedSame
];
【讨论】:
当持久层是 sqlite3 时,这显然不起作用。我的情况是这样。以上是关于NSSortDescriptor 可以使用部分键进行排序吗?的主要内容,如果未能解决你的问题,请参考以下文章
当第一个描述符是 NSDate 时,多个 NSSortDescriptor 不起作用
如何使用 Fetch Result Controller 正确添加附加部分?