使用 NSSortDescriptor 将“nil”值保留在列表底部
Posted
技术标签:
【中文标题】使用 NSSortDescriptor 将“nil”值保留在列表底部【英文标题】:Using NSSortDescriptor to keep 'nil' values at the bottom of a list 【发布时间】:2014-02-08 08:40:01 【问题描述】:我正在对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;
【问题讨论】:
【参考方案1】:在与同事协商后更新:)
首先,您是在谈论“空白”(如在其中包含空格的字符串中)还是“nil”(完全没有值的属性)?
想到的一个想法是添加一个名为hasFirstName
的BOOL
,然后首先对hasFirstName
进行排序,然后对firstName
进行排序。
【讨论】:
【参考方案2】:NSSortDescriptor 有 sortDescriptorWithKey:ascending:comparator:
方法。使用此方法,您可以进行自定义比较并将空项目移动到底部。比较器块可能如下所示:
^NSComparisonResult(NSString *obj1, NSString *obj2)
if (obj1.length == 0)
return NSOrderedDescending;
if (obj2.length == 0)
return NSOrderedAscending;
return [obj1 compare:obj2];
【讨论】:
以上是关于使用 NSSortDescriptor 将“nil”值保留在列表底部的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSSortDescriptor 按时间倒序对 CoreData 进行排序
可以将“self”与 NSSortDescriptor 一起使用来按对象本身而不是对象的属性进行排序? (核心数据/NSFetchedResultsController)