ли вы когда-нибудь решить эту проблему?
Я был в состоянии получить индекс заголовка раздела, чтобы правильно отобразить путем реализации sectionIndexTitlesForTableView: построить свой собственный массив названий разделов:
- (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;
}
Здесь INDEXKEY это первая буква имени.
Однако это не создает один из двух вопросов в sectionForSectionIndexTitle: вместо:
Если я просто возвращает индекс для секции этого теперь несортированный индекс и больше не соответствует порядку сортировки в fetchResultController:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return index;
}
в качестве альтернативы, если я перехожу на вызов к fetchedResultsController он не сломается на неамериканском название индекса, потому что они больше не странные символы, используемые fetchedResultsController:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}
Последний код генерирует ошибку следующего вида при навигации к «O» индекс названию:
Согласующему приложение из-за неперехваченное исключение «NSInternalInconsistencyException», причина: «Индекс заголовок в 24 не равно к «O»»
обойти это перевести символы обижая назад к их странным самостей:
- (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];
}
Вы можете найти Значения Unicode в отладчике с действием «Print Description to Console».
Однако хорошим решением было бы выяснить, почему это странное кодирование происходит и предотвращает его.
См. Мой ответ на аналогичный вопрос [здесь] (http://stackoverflow.com/a/13292767/616764), в котором я описываю, как создавать локализованные индексы sectionKey. –