Estoy desarrollando un sistema de copia de seguridad/restauración para mi aplicación en el que el usuario puede descargar una copia de seguridad del almacén de datos principal (archivo sqlite) y reemplazar el almacén de datos actualmente utilizado con el archivo descargado. Sin embargo, una vez que el usuario descarga el archivo y reemplaza el almacén de datos actual, parece que ninguno de los datos se actualizó. Pero cuando se cierra de nuevo la aplicación &, los datos restaurados están disponibles. ¿Cómo puedo forzar que mi aplicación vuelva a cargar el archivo del almacén de datos central?Reemplazo del archivo sqlite Core Data mientras se ejecuta la aplicación, los datos no se actualizan
he tratado de acceder al delegado de la aplicación de mi UIViewController que restaura los datos, como tal, para reconstruir la pila de datos central y propagar que en todos los controladores de vista de la pila de navegación:
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
app.managedObjectContext = nil;
app.persistentStoreCoordinator = nil;
app.managedObjectModel = nil;
managedObjectContext = [app managedObjectContext];
NSArray *controllers = [self.navigationController viewControllers];
UIViewController *c;
for (int i = 0; i < [controllers count]; i++) {
c = [controllers objectAtIndex:i];
[c setManagedObjectContext:managedObjectContext];
}
Pero esto no funciona, solo arroja el siguiente error cuando vuelvo al controlador de vista raíz: 'The NSManagedObject with ID:0x5d79060 <x-coredata://D8E73D64-C9BA-4CFA-9213-F8BD61749155/MyObject/p2> has been invalidated.'
¿Alguien sabe cómo forzar a la aplicación a volver a cargar los datos y comenzar a trabajar con el nuevo archivo del almacén de datos?
Gracias por la respuesta. Esto funciona genial ¿Sabes cómo manejar las versiones en esta situación? Intenté reemplazar el archivo sqlite por una versión anterior, y me da el error "No se puede encontrar el modelo para la tienda de origen". –
Necesita versionar explícitamente su archivo de modelo. Xcode tiene herramientas para hacer esto: busque la opción de agregar una versión de modelo a un 'xcdatamodel' existente. – Tim