/ / IOS: eliminar un almacenamiento persistente en una implementación de CoreData de multiproceso - ios, object-c, core-data

IOS: Eliminar un almacenamiento persistente en una implementación de CoreData de subprocesos múltiples - ios, objetivo-c, core-data

El multiproceso es definitivamente una cosa difícil.

Tengo un tema principal (AppDelegate), y luego miLa aplicación comienza a enviar otras solicitudes para sincronizar algunos datos de acuerdo con algunas acciones del usuario. Los datos leen y modifican los CoreData. Como se dice Apple, se está creando un Conext de objetos gestionados en cada hilo.

El problema es, la "función de base de datos de reinicio". Ese que simplemente eliminará todos los datos almacenados localmente.

Estoy haciendo eso eliminando la Tienda Persistente en el AppDelegate al igual que:

- (bool) resetCoreData
{

//Remove the persistent Store.
NSError *error;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"insight.sqlite"];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];

//Borrar los conextos para que el APP lo cree despues
for (NSManagedObject *ct in [self.managedObjectContext registeredObjects]) {
[self.managedObjectContext deleteObject:ct];
}



NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

//Make new persistent store for future saves
if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
// TODO: handling
}

return true;

}

Luego, si intenta obtener datos de algún otro hilo:

 *** Terminating app due to uncaught exception "NSObjectInaccessibleException", reason: "CoreData could not fulfill a fault for "0x1edba090 <x-coredata://5EAC46F6-54DA-480B-9B15-CB28248FD1CE/PlanResults/p7>""

¿Pensamientos?

Respuestas

1 para la respuesta № 1

Necesitas liberar todo NSManagedObjectContext objetos antes de eliminar su NSPersistentStoreCoordinator objeto. Esto tiene que suceder para todos. NSManagedObjectContext Objetos en todos los hilos. NSManagedObjectContext Los objetos tienen una propiedad persistentStoreCoordinator.

Después de borrar el NSPersistentStoreCoordinator archivo, a continuación, puede volver a crear el NSManagedObjectContext objetos.