在我的核心数据模型中,我有一个人物实体,其属性为firstName和lastName。当我使用带有fetchedResultsController的排序描述符时,我按firstName排序。但是如果firstName是nil,我想改用lastName。
我也有人和物之间的关系,称为personOfObjects,其中person< - >>对象。我正在排序以呈现在UITableView中。它的工作正常,除了名字为零的情况。在这种情况下,当这些特殊情况真的应该按姓氏排序时,它们都会被分组到同一个组中。
以下是我现在所做的事情:
NSEntityDescription * entity = [NSEntityDescription entityForName:@"object" inManagedObjectContext:dataInterface.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *personSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"personOfObject.firstName" ascending:YES];
NSSortDescriptor *objectSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"objectDescription" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:personSortDescriptor, objectSortDescriptor, nil];
我以为我可以在person类中创建一个辅助函数,如下所示:
- (NSString *) firstLast {
if (![self.firstName isNullString] ) return self.firstName;
if (![self.lastName isNullString] ) return self.lastName;
return @"";
}
然后更改第一个排序描述符以引用此函数:
NSSortDescriptor *personSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"personOfObject.firstLast" ascending:YES];
NSSortDescriptor *objectSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"objectDescription" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:personSortDescriptor, objectSortDescriptor, nil];
我真的没想到这会起作用(但事实并非如此),但我想知道是否有一种直截了当的方式来做这样的事情。
答案 0 :(得分:2)
您可以使用自己的NSComparator(How to use NSComparator?)
来完成此操作这个问题也有一些代码:
How to Sort an NSMutableArray of Managed Objects through an object graph
您必须在比较器中添加条件比较,而不是链接排序描述符。