Приоритеты NSSortDescriptor

Я использую NSSortDescriptor для сортировки контактов с firstName, но если имя nil, сортировка будет неправильной.

если у меня есть:

контакт 1: Имя = BAAAA и Фамилия = XXXXXX

контакт 2: Имя = ноль и Фамилия = AAAAAA

вроде это будет так.

1- ААААААА

2- БАААА ХХХХХХ

поэтому мне нужно знать, существует ли решение для установления приоритетов между Firstname и LastName.

если Firstname ==nil так возьми LastName

Спасибо

2 ответа

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];
}
Другие вопросы по тегам