使用NSSortDescriptor将'nil'值保留在列表的底部

时间:2014-02-08 08:40:02

标签: ios core-data nsfetchedresultscontroller nssortdescriptor

我正在研究NSFetchedResultController数据的排序。我需要按名字对数据进行排序。但是,有些条目没有名字。

我需要“无名字”对象才能显示在列表的底部,而不是顶部。使用当前代码,当我按名字对列表进行排序时,“无名字”单元格位于顶部。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contacts"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES]];
_FRC = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                            managedObjectContext:MOC
                                           sectionNameKeyPath:nil cacheName:nil];   
_FRC.delegate = self;

2 个答案:

答案 0 :(得分:5)

与同事协商后更新:)

首先,你是在谈论“空白”,因为在一个字符串中有空格或'nil'这是一个没有任何价值的属性?

提出的想法是添加名为BOOL的{​​{1}},然后先在hasFirstName上排序,然后按hasFirstName排序。

答案 1 :(得分:-1)

NSSortDescriptorsortDescriptorWithKey:ascending:comparator:方法。使用此方法,您可以进行自定义比较并将空项目移动到底部。比较器块可能如下所示:

^NSComparisonResult(NSString *obj1, NSString *obj2) {
     if (obj1.length == 0) {
         return NSOrderedDescending;
     }
     if (obj2.length == 0) {
         return NSOrderedAscending;
     }

     return [obj1 compare:obj2];
 }