2010-11-29 14 views
5

Tengo la aplicación Core Data y he estado migrando (actualizando) el modelo de datos básicos. Cada vez que creo una nueva versión, creo un modelo de mapeo para cada versión. Ahora tengo 16 versiones y tengo modelos de mapeo que van de la siguiente manera: 1to2.xcmappingmodel 2to3.xcmappingmodel 3to4.xcmappingmodel ... etc. hasta 16Migración a través de varias versiones en los datos principales

Esto funciona bien, pero surge un problema cuando un usuario tiene un archivo de datos con la versión 10 y actualiza la aplicación que tiene la versión 16. Algunos pensé que Core Data se actualizará automáticamente de 10 a 16, pero aparece el error que dice "Falta el modelo de mapeo". Para asegurarme de que los modelos de mapeo eran correctos, los actualicé a cada versión uno por uno (10 a 11, 11 a 12, etc.) y funcionó ... Aquí está mi código.

se especifica la versión del modelo con este código:

NSBundle *modelWrapper = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TaskApp_DataModel" ofType:@"momd"]]; 
NSString *modelPath = [modelWrapper pathForResource:@"TaskApp_DataModel 16" ofType:@"mom"]; 
NSLog(@"%@",modelPath); 
managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]]; 

Y defino la opción Migrar automática aquí:

NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata-sql"]]; 


NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption]; 



if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
              configuration:nil 
              URL:url 
              options:dict 
              error:&error]){ 

¿Alguien sabe cómo actualizar esto? Gracias.

Respuesta

1

solo intentará pasar de la versión existente de los usuarios (posiblemente v1) a la versión actual. si tiene 3 versiones, entonces necesita mapas para v1-v2, v2-v3, v1-v3. tener todas las 16 versiones enviadas? si es así, puede que necesite comenzar a crear nuevos mapas de migración, también puede valer la pena la migración automática si no lo ha probado antes, ya que puede ser muy útil para llenar los vacíos. Creo que es:

[dict setObject:[NSNumber numberWithBool:YES] forKey:NSInfersMappingModel];

pero usted tendrá que volver a comprobar.

siento ser el portador de malas noticias

+1

Sí gracias ... acabo de encontrar en el libro de Marcus Zarra Core Data ... escribió un gran procedimiento para migrar de cada modelo a otro sin tener que escribir adicional mapeo de modelos. Voy a comprobar NSINfersMappingModel ¡Gracias! –

+0

¡InfersMappingModel funcionó! ¡Gracias! –

+0

intente y mantenga las migraciones de datos al mínimo (es decir, versiones principales) como los gastos generales muy rápidamente (mapeo de modelos de cada versión a la actual para cada cambio). Además, tenga en cuenta que el uso de la migración automática puede funcionar de una versión a otra. , pero su modelo puede cambiar lo suficiente como para que la versión 16 a la 21 sea tan diferente que no pueda calcular la diferencia. ¡Me alegro de que lo arregló! – MCannon

Cuestiones relacionadas