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