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

我正在sortingNSFetchedResultController数据。 我需要按名字sorting数据。 但是,有一些没有名字的条目。

我需要“无名”对象出现在列表的底部,而不是顶部。 使用当前的代码,当我按名sorting列表时,“无名”单元格放在顶部。

 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; 

经过与同事的一些咨询后更新:)

首先,你是在谈论“空白”,就像在一个string中有空格或“无”,这是一个完全没有价值的属性?

一个想法是添加一个叫做hasFirstNameBOOL ,然后在hasFirstNamesorting,然后在firstNamesorting。

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