Приоритеты 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];
}