Я получаю очень странное поведение с NSSortDescriptor.Давайте начнем с моего кода:
NSSortDescriptor *nameExists = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES comparator:^(id obj1, id obj2){
if ( ([obj1 isEqualToString:@""] || [obj1 isKindOfClass:[NSNull class]] || obj1 == nil) && ![obj2 isEqualToString:@""]){
return NSOrderedDescending;
}
else if ( ![obj1 isEqualToString:@""] && ([obj2 isEqualToString:@""] || [obj2 isKindOfClass:[NSNull class]] || obj2 == nil) ){
return NSOrderedAscending;
}
return NSOrderedSame;
}];
Это дескриптор сортировки, который я использую для упорядочения пользователей в моей базе данных теми, у кого есть поля имени, и теми, кто его не имеет.Таким образом, если у вас есть список пользователей из 20 человек, а у 5 человек нет имен, а у 15 - имена, 15 с именами будут отсортированы раньше, чем без.Это в отличие от обычного поведения сортировки строкового поля по возрастанию, при котором записи с пустыми полями отображаются перед непустыми полями.
Когда я впервые загружаю представление, этот дескриптор сортировки возвращаетсяк поведению по умолчанию - с пустыми полями перед полными полями, как будто моего компаратора там не было.
Однако, если я добавляю новые записи в Core Data, мой NSFetchedResultsController загружает записи должным образом, и в соответствии с моимкомпаратор.
Моя интуиция сказала мне, что с размещением моего блока что-то не так.У меня это в методе инициализации представления.Однако я изменил его на метод loadView, и его поведение не изменилось.
Кто-нибудь знает, что происходит?