2013-11-07 3 views
0

У меня есть список управляемых объектов, хранящихся в данных ядра. Я использую эти объекты для заполнения контроллера таблицы, который разделен в алфавитном порядке. Данные в этих объектах получаются через веб-службу, поэтому я не могу контролировать их случай (что в действительности не имеет особого значения).Сортировка NSArray и приоритет случая

Большая часть данных возвращается во всех шапках. Я заметил, что в редких случаях, когда дело не все, эти предметы не попадают в алфавитном порядке. В следующем примере кода stationIndex представляет собой массив отсортированных первых букв:

for(NSString *character in stationIndex){ 

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", character]; 
    // sort the list 
    NSArray *filteredGaugeList = [[tempGaugeList filteredArrayUsingPredicate:pred] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
     NSString *first = [(Gauge*)a name]; 
     NSString *second = [(Gauge*)b name]; 
     return [first compare:second]; 
    }]; 
    if([filteredGaugeList count] > 0){ 
     [[self allGauges] addObject:filteredGaugeList]; 
    } 
} 

Я знаю, что есть способ игнорировать случай, когда с помощью селектора, но в моем случае, я сортировка по свойствам объектов, поэтому я предполагаю, что мне нужен компаратор. Есть ли способ справиться с ситуацией в этой ситуации? Благодаря!

ответ

2

Вы можете сортировать, игнорируя регистр в качестве компаратора, а также, просто использовать

return [first caseInsensitiveCompare:second]; 

В качестве альтернативы, используйте дескриптор сортировки с указанием выбора и рода ключ:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" 
          ascending:YES 
          selector:@selector(caseInsensitiveCompare:)]; 
NSArray *sorted = [array sortedArrayUsingDescriptors:@[sort]]; 

Примечание: Чтобы отобразить объекты Core Data в виде таблицы, вы также можете использовать NSFetchedResultsController. Затем вы добавите предикат и дескриптор сортировки в запрос на выборку. Контроллер получаемых результатов также имеет методы для группировки представления таблиц в разделы и автоматического обновления вида таблицы , когда объекты вставлены/удалены/изменены.

Смежные вопросы