我有一个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_and_number键部分,并以某种方式将其添加到NSSortDescriptor对象中?
答案 0 :(得分: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排序。
答案 1 :(得分:0)
尝试将NSComparator块添加到NSSortDescriptor的初始化中,如下所示:
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
}];