Hai mai risolvere questo problema?
Sono stato in grado di ottenere l'indice di titolo della sezione per visualizzare correttamente implementando sectionIndexTitlesForTableView: costruire il mio gamma di titoli delle sezioni:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
NSMutableArray *indexKeys = [NSMutableArray arrayWithCapacity:30];
NSArray *fetchedResults = [fetchedResultsController fetchedObjects];
NSString *currKey = @"DEFAULT";
for (NSManagedObject *managedObject in fetchedResults) {
NSString *indexKey = [managedObject valueForKey:@"indexKey"];
if (![indexKey isEqualToString:currKey]) {
[indexKeys addObject:indexKey];
currKey = indexKey;
}
}
return indexKeys;
}
Qui, indexKey è la prima lettera del nome.
Tuttavia, questo crea uno dei due temi in sectionForSectionIndexTitle: invece:
Se ho semplicemente restituire l'indice per la sezione questo è ora l'indice misti e non corrisponde più con l'ordinamento nella fetchResultController:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return index;
}
in alternativa, se mi passa la chiamata al fetchedResultsController si rompe sui titoli dell'indice fuori degli Stati Uniti, perché questi non sono più i personaggi strani utilizzati dal fetchedResultsController:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}
Quest'ultimo codice genera un errore del seguente tipo durante la navigazione per la "O" titolo dell'indice:
terminazione app a causa di eccezione non identificata 'NSInternalInconsistencyException', la ragione: 'indice del titolo a 24 non è uguale a 'O''
Una soluzione per questo è di tradurre i caratteri problematici di nuovo a loro stessi strani:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
if ([title isEqualToString:@"Æ"]) {
title = @"\u2206";
} else if ([title isEqualToString:@"Ø"]) {
title = @"\u0178";
} else if ([title isEqualToString:@"Å"]) {
title = @"\u2248";
}
return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}
È possibile trovare la Valori Unicode nel debugger con l'azione "Stampa descrizione in console".
Tuttavia, la soluzione migliore sarebbe capire perché questa codifica strana accade e impedirlo.
Vedere la mia risposta a una domanda simile [qui] (http://stackoverflow.com/a/13292767/616764), in cui descrivo come creare indici sectionKey localizzati. –