2010-08-20 8 views
7

Recibo bloqueos desde un comando save: en un managedObjectContext. Ni siquiera cumple con la declaración de NSLog, así que no veo la declaración de error no resuelta, por lo que no puedo entender cuál podría ser el problema. No sucede todas las veces, sino solo esporádicamente.Bloqueo al guardar un managedObjectContext, con 'NSInvalidArgumentException', pero solo esporádicamente

Aquí está el código (que básicamente quiere incrementar un contador):

if ([[managedObject valueForKey:@"canSee"]boolValue]){ 
    int read = [[managedObject valueForKey:@"timesRead"] intValue] +1; 
    [managedObject setValue:[NSNumber numberWithInt:read] forKey:@"timesRead"]; 


    NSError *error; 
    if (![resultsController.managedObjectContext save:&error]) { //<-- crashes on this line! 
     NSLog(@"Unresolved Core Data Save error %@, %@", error, [error userInfo]); 
     exit(-1); 
    } 

En la ventana de la consola recibo mensajes como este:

2010-08-20 08:12:20.594 AppName[23501:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet controllerWillChangeContent:]: unrecognized selector sent to instance 0xe54f560' 

o esto:

2010-08-20 08:12:20.594 AppName[23501:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet controllerWillChangeContent:]: unrecognized selector sent to instance 0xe54f560' 

o incluso esto:

2010-08-19 23:09:59.337 AppName[761:307] Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. -[UITableViewLabel controllerWillChangeContent:]: unrecognized selector sent to instance 0x7f0a860 with userInfo (null) 
    2010-08-19 23:09:59.356 AppName[761:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewLabel controllerWillChangeContent:]: unrecognized selector sent to instance 0x7f0a860' 

Luego muestra la pila de llamadas en el primer tiro, seguido de un aviso (finaliza el llamado después de arrojar una instancia de 'NSException', '[Cambiando al proceso 23501]' y 'Programa recibido señal:' SIGABRT '.'

Creo que el problema tiene algo que ver con CoreData, pero no estoy seguro. Limpié mi construcción y mis objetivos, y parece que no ayuda. Intenté bloquear/desbloquear el ManagedObjectContext y no me ayudó.

¡Cualquier idea aquí sobre dónde empezar a buscar una resolución sería muy apreciada!

Respuesta

16

Parece que está liberando un UIViewController y no libera su asociado NSFetchedResultsController. El NSFetchedResultsController está tratando de notificar a su delegado (muy probablemente su UIViewController) del guardado al salir.

+0

Sí, el problema es, sin duda que el controlador resultados obtenidos se envía un mensaje destinado a una UITableView (o su fuente de datos o delegado) a objetos que no entienden el mensaje. Realmente no tiene nada que ver directamente con Core Data. – TechZen

+0

Muchas gracias a los dos ... si entiendo correctamente, algo (como UIViewController o fuente de datos o delegado) se está lanzando cuando no debería ser así, por lo que debería tratar de buscar las declaraciones de liberación automática o de liberación que no deberían ' Estar allí, o insertar una declaración de 'retener' para mantener algún objeto lo suficientemente cerca? (NSFetchedResultsController nunca llega al punto de guardar). – frandogger

5

Para más detalles sobre la respuesta de Marcus, es necesario asegurarse de que NIL cabo el delegado para su NSFetchedResultsController cuando su visión desaparece:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    self.fetchedResultsController.delegate = nil; 
} 
Cuestiones relacionadas