Pergunta

Eu tenho o que é uma pergunta simples - tenho duas entidades - lista e listiTem - e há um relacionamento de um para muitos, tudo bem.

Meu problema surge quando estou tentando executar um FetchRequest que retornará os listões seccionados por um atributo do ListItem. Não posso executar um FetchRequest diretamente nos objetos da lista, porque não há como dizer 'onde list =' xxxxx '', então eu tinha algo como o seguinte:


- (NSFetchedResultsController *)getListItems {
    // Init a fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"listItem.productName" ascending:YES selector:nil];
    NSArray *descriptors = [NSArray arrayWithObject:sortDescriptor];
    [fetchRequest setSortDescriptors:descriptors];


    // Init the fetched results controller
    NSError *error;
    self.globalFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"listItem.productName" cacheName:@"listItems"];
    self.globalFetchedResultsController.delegate = self;
    if (![[self globalFetchedResultsController] performFetch:&error])   NSLog(@"Error: %@", [error localizedDescription]);

    [fetchRequest release];
    [sortDescriptor release];

    return self.globalFetchedResultsController;
}

Agora, esses erros porque está dizendo que não posso usar um relacionamento um para muitos no descritor de classificação-mas também exige que eu tenha um descritor de classificação, por isso não tenho certeza de que a maneira correta de fazer isso. Qualquer ajuda seria ótimo.

Foi útil?

Solução

Se você deseja buscar e seções ListItems, deve usar o "ListItem" como sua entidade para a busca.

Nesse caso, existe uma maneira de dizer "buscar todos os objetos listitem onde list = 'xxxxx'", é chamado de predicado (nspredicate).

Experimente algo assim (onde "Lista" é o nome do relacionamento ListItem com a lista):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];

Além disso, veja o Guia de programação predicado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top