NSSortDescriptor可以使用部分密钥进行排序吗?

时间:2011-02-19 07:48:11

标签: iphone ios sorting core-data nssortdescriptor

我有一个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对象中?

2 个答案:

答案 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
                                    }];