12

Estoy usando NSFetchedResultsController con un predicado para cargar una lista de Documents en mi aplicación. Quiero cargar todo el Documents excepto el actualmente activo.Datos principales: Keypath "objectID" no encontrado en la entidad

Estoy usando Rentzsch's MOGenerator para crear una clase _Document y luego puse todo mi código personalizado en la subclase Document. _Document genera una propiedad objectID con tipo DocumentID.

En la clase que crea el controlador, puse currentDocID la propiedad del controlador:

controller.currentDocID = self.document.objectID; 

En el propio controlador, que carga perezosa la fetchedResultsController así:

- (NSFetchedResultsController *)fetchedResultsController { 
    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID != %@)", self.currentDocID]; 
    [fetchRequest setPredicate:predicate]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateModified" ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    [aFetchedResultsController release]; 
    [sortDescriptor release]; 
    [sortDescriptors release]; 

    return fetchedResultsController; 
} 

cuando se carga el fetchedResultsController , mi aplicación se bloquea con una excepción no controlada:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath objectID not found in entity <NSSQLEntity Document id=1>' 

Tengo entendido que todos los NSManagedObjects tienen un ID de objeto, ya sea temporal o permanente. ¿No es este el caso? ¿Alguna idea?

Respuesta

10

Cambiar la predicado para leer

[NSPredicate predicateWithFormat:@"self != %@", [self currentDoc]] 

Dónde currentDoc es una referencia a la instancia de la NSManagedObject que representa el documento actual.

Core Data hará la comprobación de igualdad internamente.

+2

¿Sabes por qué '... @" self! =% @ ", [Self currentDoc]]' no es lo mismo que '... @" (objectID! =% @) ", Self.currentDocID] '. Según esta publicación, http://stackoverflow.com/a/2306550/647644, debería ser equivalente. – Lindemann

+0

@Lindemann Mejor si crea una nueva pregunta en su lugar. –

Cuestiones relacionadas