quedan que nueva llega hasta cuantas como actualizar actualizaciones actualizacion iphone cocoa core-data migration mapping-model

iphone - que - itunes



Migración de datos principales a través de actualizaciones de versiones múltiples (2)

Tengo una aplicación para iPhone que usa Core Data.

Hice una actualización y utilicé Migración Ligera para ir de V1 a V2 de mi MOM (Modelo de Objetos Administrados). Esto funcionó perfectamente.

¿Qué sucede cuando quiero ir a V3 (y más allá) de mi MOM?

  • Si decido continuar con Lightweight Migration, ¿se tratará automáticamente con la migración de V1 a V3 y V2 a V3 de mi MOM, o tengo que hacer algo extra?
  • Si decido usar un modelo de mapeo, ¿qué ocurre? ¿Cómo trato la actualización de MOM V1 y V2 a V3? ¿Necesito crear un modelo de mapeo para V1 a V3 y V2 a V3?
  • Esta pregunta va más allá ... ¿Qué sucede cuando tengo V6 MOM y aún necesito apoyar la posibilidad de actualizar desde una V1 MOM?

Otra pregunta es ¿cuál es la mejor manera de determinar la versión de la MOM actual? ¿Debo usar isConfiguration: compatibleWithStoreMetadata:

Gracias por cualquier ayuda. Me encanta Core Data. Pero a veces me da vueltas la cabeza y me confundo, por lo que busco sabiduría sabia.


Fui con la migración ordinaria usando createDestinationInstancesForSourceInstance.
El fragmento muestra cómo anular ese método y cómo hacer que la versión de origen del modelo migre. La migración real está ocurriendo en la clase auxiliar TZMigrationHelper.

- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error { float sourceVersion = [[[mapping userInfo] valueForKey:@"sourceVersion"] floatValue]; if(sourceVersion <= 0.9) { mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"someProperty"]; mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"anotherProperty"]; mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"oneMoreProperty"]; } return [super createDestinationInstancesForSourceInstance:sInstance entityMapping:mapping manager:manager error:error]; }


La publicación inicial fue hace muchos meses, pero creo que la mejor respuesta se encuentra en el libro de datos básicos de Marcus Zarra (o en línea en los ejemplos del código). Google para "progresivamenteMigrateURL" y uno encontrará código para iterar progresivamente a través de modelos, lo que le permitiría crear asignaciones del modelo n al modelo n + 1, sin preocuparse por la explosión combinatoria para crear asignaciones entre todas las parejas de modelos.

Esto puede provocar una migración más lenta en el tiempo de ejecución. No he investigado esto.