He encontrado algunos problemas al guardar NSManagedObjectContext dentro de NSOperation con ARC activado. Sin ARC, todo estaba bien antes. Siempre da EXC_BAD_ACCESS durante el guardado. El código es el siguiente:EXC_BAD_ACCESS en el método de guardado NSManagedObjectContext dentro de NSOperation y ARC, ¿por qué?
//on the main thread
-(void)someFunc
{
array = ... //fetching an array of entities from a core data
for(SomeEntity * obj in array)
{
NSSomeOperation * op = [[NSSomeOperation alloc] initWithValue:[obj someField]];
//start an operation
}
}
//NSSomeOperation implementation
//...
- (void)main {
//some code
NSError * error = nil;
[mainContext lock];
if (![mainContext save:&error]) { //<--- HERE EXC_BAD_ACCESS
//process error
}
[mainContext unlock];
//some code
}
//...
El uso de [setRetainsRegisteredObjects mainContext: SI] y objectWithID no resuelven este problema.
EXC_BAD_ACCESS (código = 1)
EXC_BAD_ACCESS (código = 13)
-[__NSCFType contextDidSave:]: unrecognized selector sent to instance 0x7fc5c505d940
An observer of NSManagedObjectContextDidSaveNotification illegally threw an exception.
Objects saved = {
inserted = "{(\n)}";
updated = "{(\n <SomeEntity: 0x7fc5c55b6220> (entity: SomeEntity; id: 0x7fc5c5052b20 ...)}"; }
and exception = -[__NSCFType contextDidSave:]: unrecognized selector sent to instance 0x7fc5c505d940 with userInfo = (null)
uso un contexto de objeto gestionado separado y buscar mi objetos gestionados dentro de este NSOperation.
¿Tal vez se trata de algo relacionado con errores de datos centrales o ARC? Quizás ARC limpie algunos de los objetos que deben guardarse. Porque, sin ARC todo estaba bien, todo funcionó. Cuando encendí ARC - EXC_BAD_ACCESS.
¿Alguien sabe por qué ocurre?
¿Esto está en el hilo principal? – Jim
No, Jim. Esto está dentro de NSOperation, en el otro hilo. –
De acuerdo, la razón por la que pregunto es porque puede agregar una NSOperation a la cola principal (usando NSOperationQueue mainQueue] addOperation: ...]. Si esto está en un hilo secundario o cola, ¿está siguiendo la documentación de Apple para usar un archivo separado? contexto de objeto gestionado, y fusionar los cambios de nuevo en el contexto en la cola principal? – Jim