Вы создаете подкласс этого класса, если хотите настроить создание разделов и заголовков индекса. Вы переопределяете sectionIndexTitleForSectionName: если вы хотите, чтобы заголовок индекса раздела отличался от заглавной первой буквы имени раздела. Вы переопределяете sectionIndexTitles, если хотите, чтобы заголовки индексов отличались от массива, созданного путем вызова sectionIndexTitleForSectionName: во всех известных разделах.

тоящее время я работаю над приложением, которое имеет несколько сущностей и отношений, как показано ниже:

Предмет&nbsp;<< ->категория.

Я сейчас везуПредмет&nbsp;экземпляры и отображение их в разделах с помощью элементаcategory.name, В этом случае я могу использовать дескриптор сортировки для сортировки категорий по имени, что довольно просто и работает нормально (соответствующий код ниже):

-(NSFetchedResultsController*)fetchedResultsController {
    if (fetchedResultsController_ != nil)
        return fetchedResultsController_;
    NSManagedObjectContext *moc = [order_ managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:moc];
    [fetchRequest setEntity:entity];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];
    NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
                                          initWithFetchRequest:fetchRequest
                                          managedObjectContext:moc
                                          sectionNameKeyPath:@"category.name"
                                          cacheName:nil];
    controller.delegate = self;
    self.fetchedResultsController = controller;
    [controller release];
    [fetchRequest release];

    NSError *error = nil;
    if (![fetchedResultsController_ performFetch:&error]) {
        // Error handling
    }
    return fetchedResultsController_;
}

Моя проблема сейчас в том, что мне нужно отсортировать эти категории не по имени, а по(NSNumber*) displayOrder&nbsp;атрибут, который является частьюкатегория&nbsp;организация.НО&nbsp;Мне нужно, чтобы заголовки разделов в табличном виде продолжали использовать категориюname.

Если я установлю sortDescriptor для использованияcategory.displayOrder&nbsp;и оставьте sectionNameKeyPath какcategory.nameзаголовки разделов работают нормально, но sortDescriptor просто игнорируется fetchedResultsController, а разделы таблицы упорядочиваются по имени категории (не знаю, почему ??).

Моей следующей идеей было переписатьdisplayOrder&nbsp;метод getter, но это не слишком сильно меня задело, так как типы возвращаемых данных разные, плюс мне нужно было фактическое значение displayOrder для сортировки разделов.

Итак, сейчас у меня есть решение, которое кажется немного неуклюжим (код ниже), и мне интересно, есть ли лучший способ добиться того же, используя только fetchedResultsController.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
// The code below grabs a reference to first object for a given section
// and uses it to return the associated category name
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    NSArray *menuItems = [sectionInfo objects];
    if ([menuItems count] > 0)
    {
        MenuItem *menuItem = [menuItems objectAtIndex:0];
        NSString *categoryName = menuItem.category.name;
        return categoryName;
    }
    return [sectionInfo name];
}

Я что-то упустил здесь?

Заранее спасибо за ваши мысли.

Рог