He descubierto que esto es bastante simple, una vez que sabes dónde buscar.
En mi AppDelegate I Puesta en marcha Los NSPersistentStoreCoordinator - y hay que añadir algunas opciones para este contarla para manejar auto-migrar:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
NSLog(@"Problem with PersistentStoreCoordinator: %@",error);
}
Luego hay que hacer un pequeño truco en Xcode:
- Seleccione su archivo xcdatamodel
- Seleccione el menú Diseño en la parte superior - a continuación, Modelo de datos - a continuación, seleccione Agregar Modelo Versión
- su xcda El archivo tamodel se moverá a un nuevo directorio con el mismo nombre que su archivo xcdatamodel pero con la extensión xcdatamodeld - habrá un segundo archivo en este directorio con un 2 en el nombre. Seleccione el nuevo archivo y luego Diseño-> Modelo de datos-> Establecer versión actual (in Xcode 4 you do this)
- Si ya ha realizado los cambios que han hecho que su proyecto sea incompatible, elimine estos cambios del archivo xcdatamodel original. Si aún tiene que hacer los cambios, simplemente edite el archivo 2.xcdatamodel (el que acaba de crear la versión actual).
- Ahora cuando instale esta versión en un dispositivo que tenga el modelo anterior, actualizará automáticamente ese modelo al nuevo modelo.
Esto parece genial y tan simple como yo quería, pero creo que debe tener cuidado durante el desarrollo al cambiar un modelo; de lo contrario, tendrá que crear una nueva versión para cada cambio.
Creo que lo que haré es mantener todos los archivos modificados y luego, cuando me prepare para implementar mi actualización, borraré todos los archivos intermedios y solo implementaré los modelos más antiguos y más recientes.
ACTUALIZACIÓN (15/07/2011):
Gracias a @rockstarberlin para señalar la documentación no se actualiza la manzana:
Xcode 4: Setting a Managed Object Model’s Current Version
actualización: 8/19/2013 mejor enlace:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html
Sugeriría leer el Core Data Migration y Versioning Guid e, disponible en Xcode doc viewer y en developer.apple.com. – Hunter
No encontré la respuesta simplemente presentada, tomó un tiempo para averiguar cómo hacer esto. – Grouchal
NSInferMappingModelAutomaticallyOption funciona bien, pero solo para asignaciones simples, como cambiar el nombre de un atributo. Para algo más complicado (relaciones, eliminación o adición de entidades) necesitará agregar un modelo de mapeo. Si Xcode se queja de que NSInferMappingModelAutomaticallyOption no está declarado, agregue #import al archivo de encabezado delegado de su aplicación. –