De vez en cuando mi aplicación se bloquea antes de que sea correcta carga completa en la siguiente línea:aleatoria EXC_BAD_ACCESS con persistentStoreCoordinator
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
El método completo en esto si el estado se encuentra miradas de la siguiente manera (creo que esto es bastante estándar):
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
actualización
el accidente ocurre en el segundo tiempo de laSe llama al método. EDITAR El tiempo Frist se llama desde el primer viewController que es visible:
- (void)updateStats {
NSLog(@"Updating stats");
dispatch_queue_t request_queue = dispatch_queue_create("updateNumberOfSchedules", NULL);
dispatch_async(request_queue, ^{
AppDelegate *theDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
...
});
}
La segunda vez (cuando el accidente ocurre a veces cuando mi clase DeviceLinker va a comprobar la base de datos para enlaces inactivos en mis checkInactiveLinks . método Este método es llamado lanzamiento en applicationDidBecomeActive
:
-(void) checkInactiveLinks {
AppDelegate *theDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
[newMoc setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
...
}
corrígeme si me equivoco, pero la lectura de mi código me gustaría pensar que en el segundo tiempo, el captador persistentStoreCoordinator se llama debe devolver __persistentStoreCoordina Tor y no asigna e init una nueva ...
ACTUALIZACIÓN 2 En la misma línea exacta en la sentencia if me sale esto de vez en cuando también:
-[__NSCFDictionary _hasPrecomputedKeyOrder]: unrecognized selector sent to instance 0x7dd3770
ACTUALIZACIÓN 3
Edité mi esquema de compilación y encendí zombis y registré excepciones en la pestaña de diagnóstico. Ahora veo -[NSPersistentStoreCoordinator unlock]: message sent to deallocated instance 0x8916090
. Tenga en cuenta que no tengo ningún bloqueo explícito en mi código.
¿Estás utilizando ARC? – mydogisbox
¿Qué hay en los registros? –
¿Está editando el modelo sin volver a crear una nueva versión del modelo primero, por casualidad? –