0

我使用 NSSortDescriptor 对带有 firstName 的联系人进行排序,但是如果 first name 为 nil,则排序将是错误的。

如果我有:

联系人 1:名字 = BAAAA 和姓氏 = XXXXXX

联系人 2:名字 = nil 和姓氏 = AAAAAA

它会是这样的。

1- AAAAAA

2- BAAAA XXXXXX

所以我需要知道是否存在在名字和姓氏之间确定优先级的解决方案。

如果是 Firstname ==nil这样,取姓氏

谢谢

4

2 回答 2

1
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...
}
于 2013-11-15T08:53:47.963 回答
0

您可以子类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];
}
于 2013-11-15T08:58:07.960 回答