Getting NSFetchedResultsController, NSSortDescription e sectionNameForKeyPath para trabalharem juntos

Atualmente, estou trabalhando em um aplicativo que possui algumas entidades e relacionamentos, conforme ilustrado abaixo:

Ite <<-->Categori.

No momento, estou buscandoIte e exibindo-as em seções usando o @ do itcategory.name. Nesse caso, posso usar um descritor de classificação para classificar as categorias por nome, o que é bastante direto e funciona bem (código relevante abaixo):

-(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_;
}

Meu problema agora é que preciso classificar essas categorias não por nome, mas por um(NSNumber*) displayOrdertributo @ que faz parte doCategori entidade.MA Eu preciso dos títulos das seções na tableview para continuar usando o código da categorianame.

Se eu definir o sortDescriptor para usarcategory.displayOrder e mantenha o sectionNameKeyPath comocategory.name, os títulos das seções funcionam bem, mas o sortDescriptor é simplesmente ignorado pelo fetchedResultsController e as seções da tabela são ordenadas pelo nome da categoria (não sei por que?

inha próxima idéia foi sobrescrever odisplayOrder método getter, mas isso não me levou muito longe, pois os tipos de retorno são diferentes, e eu precisava do valor displayOrder real para a classificação da seçã

Então, agora eu tenho uma solução que parece um pouco desajeitada (código abaixo), e estou me perguntando se existe uma maneira melhor de conseguir a mesma coisa usando o fetchedResultsController sozinh

- (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];
}

Estou perdendo algo básico aqui?

Agradecemos antecipadamente por seus pensamentos

Rog

questionAnswers(4)

yourAnswerToTheQuestion