NSPredicate, executeFetchRequest crash

Estoy haciendo un tutorial de Core Data y sigo teniendo un colapso. Es un objc_exception_throw.

Creo un método llamado loadTableData y lo llamo en viewDidLoad

-(void)loadTableData{
    NSManagedObjectContext *context = [[self appDelegate]managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Label" inManagedObjectContext:context];

    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label like %@", [context objectWithID: self.labelID]];

    [fetchRequest setPredicate:predicate];


    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES];

    NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    self.artistArray = [context executeFetchRequest:fetchRequest error:&error];

    [self.tableView reloadData];
}

Se atasca aquí

self.artistArray = [context executeFetchRequest:fetchRequest error:&error];

Al comentar el predicado alloc/init y setPredicate, el método de llamada genera una aplicación que no falla, pero no hace lo que yo quiero.

Ver entidades y relaciones a continuación.

Core Data Entities

En LabelViewController aquí hay un código adicional para mostrar cómo se establece [context objectWithID: self.labelID]

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MLBLArtistViewController *artistViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ArtistViewController"];

    Label *label = [self.labelArray objectAtIndex:indexPath.row];

    artistViewController.labelID = [label objectID];

    [self.navigationController pushViewController:artistViewController animated:YES];
}
0
@MartinR Por favor vea la pregunta editada arriba.
agregado el autor noobsmcgoobs, fuente
¿La "etiqueta" es una propiedad de la entidad "Etiqueta"? ¿Qué tipo tiene? ¿Y qué tipo de objeto devuelve [context objectWithID: self.labelID] ?
agregado el autor Martin R, fuente

2 Respuestas

Yo usaría un CONTAINS en su lugar:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label CONTAINS[cd] %@", [context objectWithID: self.labelID]];

You can use a LIKE but I like the simplicity of the CONTAINS, see this quesiton: NSPredicate that is the equivalent of SQL's LIKE

0
agregado
¿puedes publicar el registro de bloqueo?
agregado el autor Slee, fuente
Parece que está pasando un objeto a su predicado en lugar de buscar una propiedad específica. [context objectWithID: self.labelID] Estoy bastante seguro de que eso no funcionará.
agregado el autor Slee, fuente
Ver el comentario anterior de Martin R, preguntas importantes para responder
agregado el autor Slee, fuente
Punta fría, todavía se cuelga.
agregado el autor noobsmcgoobs, fuente
12/17/13 12: 41: 31.037 AM Xcode [551]: [MT] IDENavigableItemCoordinator: - number: 1 - name: Thread 1)> tiene 9 childItems pero indexOfChildItemForIdentifier: '6574070280564460612' devolvió el índice de 9
agregado el autor noobsmcgoobs, fuente

En primer lugar, parece que quieres buscar objetos "Artist", no objetos "Label":

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Artist" inManagedObjectContext:context];

A continuación, LIKE o CONTAINS son para pruebas strings , necesita un == simple:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label == %@", [context objectWithID:self.labelID]];

Remark: It would be simpler to pass the label object itself to the pushed view controller, instead of [label objectID].

0
agregado