我使用 NSSortDescriptor 对带有 firstName 的联系人进行排序,但是如果 first name 为 nil,则排序将是错误的。
如果我有:
联系人 1:名字 = BAAAA 和姓氏 = XXXXXX
联系人 2:名字 = nil 和姓氏 = AAAAAA
它会是这样的。
1- AAAAAA
2- BAAAA XXXXXX
所以我需要知道是否存在在名字和姓氏之间确定优先级的解决方案。
如果是 Firstname ==nil
这样,取姓氏
谢谢
我使用 NSSortDescriptor 对带有 firstName 的联系人进行排序,但是如果 first name 为 nil,则排序将是错误的。
如果我有:
联系人 1:名字 = BAAAA 和姓氏 = XXXXXX
联系人 2:名字 = nil 和姓氏 = AAAAAA
它会是这样的。
1- AAAAAA
2- BAAAA XXXXXX
所以我需要知道是否存在在名字和姓氏之间确定优先级的解决方案。
如果是 Firstname ==nil
这样,取姓氏
谢谢
NSSortDescriptor *descriptor1 = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSSortDescriptor *descriptor2 = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
NSArray *sorted = [contatcs sortedArrayUsingDescriptors:@[descriptor1, descriptor2]];
数组中描述符的顺序决定了优先级。对于核心数据查询,它类似于
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
[request setSortDescriptors:@[descriptor1, descriptor2]];
NSError *error;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (array == nil)
{
// Deal with error...
}
您可以子类NSSortDescriptor
化并覆盖该compareObject:toObject:
方法:
- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2 {
NSString *firstName1 = [object1 valueForKey:@"firstName"];
NSString *lastName1 = [object1 valueForKey:@"lastName"];
NSString *firstName2 = [object2 valueForKey:@"firstName"];
NSString *lastName2 = [object2 valueForKey:@"lastName"];
if(firstName1 == nil || firstName2 == nil) {
return [lastName1 compare:lastName2];
}
return [firstName1 compare:firstName2];
}