2009-11-21 12 views
5

Tengo un contexto de objeto administrado al que agrego dos almacenes SQLite diferentes. Yo uso Configuraciones en el Modelo de Objetos Gestionado para asignar ciertas entidades a una tienda y otras entidades a la otra. Las Configuraciones se llaman "UserDB" y "MainDB".Mensaje de error de migración de datos centrales "'El modelo no contiene la configuración' XYZ '.'"

Todo funciona bien hasta que intento usar la migración automática. Después de crear una nueva versión del Modelo de Objetos Administrados y agregar un nuevo atributo a una de las entidades en la Configuración de UserDB, recibo una excepción al agregar el almacén de versiones anterior (para la tienda relacionada con UserDB) al coordinador de la tienda: 'El modelo no contener la configuración 'UserDB'. ' No puedo encontrar hits para este error en Google. ¿Alguien está usando múltiples tiendas con configuraciones? ¿Alguien tiene una idea de lo que podría estar haciendo mal?

La pila tiene el siguiente aspecto:

objc_exception_throw 
-[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:] 
-[NSStoreMigrationPolicy sourceModelForStoreAtURL:metadata:error:] 
-[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] 
-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] 
-[MyAppDelegate persistentStoreCoordinator] 
+0

Se metió en este problema también. ¿Ocurre lo mismo al crear mapas de migración? – pokstad

Respuesta

11

Esto parece un error con configuraciones de migración +. Pude solucionar el problema siguiendo los mismos pasos y pasando nil para la configuración al llamar a addPersistentStoreWithType. La migración ocurre, y luego puedo crear un nuevo coordinador de tienda persistente y agregar las tiendas nuevamente con los argumentos adecuados de la cadena de configuración.

Este es el segundo error relacionado con la configuración que me he encontrado. No es una característica bien probada aparentemente.

+0

Gracias por publicar esto. Este también fue mi problema. – awolf

+0

Gracias, esto parece haber funcionado para mí. – futureshocked

+0

Hmm estado luchando con esto el pasado día más o menos. Esta solución "casi" funciona. Pero parece que hay un problema de tiempo asociado: es decir, solo funciona a veces si detengo la ejecución el tiempo suficiente. –

0

Tuve el mismo problema. El patrón de hecho era idéntico y el mensaje de error era el mismo. Resultó, sin embargo, ser el resultado de mi propio error.

Digamos que el modelo anterior era Blah.xcdatamodel y el nuevo Blah 2.xcdatamodel. Empecé a hacer cambios en Blah antes de darme cuenta de mi error y crear Blah 2. Luego usé mi sistema de control de versiones (Git) para volver al viejo Blah y luego recreé Blah 2. Todo parecía estar bien. Pero debo haber hecho algo mal en el proceso de reversión, porque cuando pensé volver a comprobar que Blah.xcdatamodel en mi carpeta de proyecto actual era realmente lo mismo que Blah.xcdatamodel en la carpeta del proyecto que utilicé para construir la versión anterior de la aplicación (Afortunadamente, siempre guardo un archivo comprimido de la carpeta del proyecto para cada versión lanzada ya que no confío totalmente en los sistemas de control de versiones), descubrí que en realidad eran diferentes, aunque se veían idénticos en XCode. El tamaño del archivo era diferente, por ejemplo.

He sustituido el viejo Blah en mi carpeta de proyecto actual, y he aquí que todo salió a la perfección, sin necesidad de la solución descrita por Ken.

No digo que Ken necesariamente haya cometido un error similar, pero si encuentra este mensaje, al menos vale la pena confirmar que el modelo que está migrando es REALMENTE el modelo que se utilizó para crear los datos en cuestión .

+0

Desde entonces he encontrado que el problema de hecho NO fue resuelto. Parece que funcionó la segunda vez solo porque los datos se habían migrado la primera vez. En otras palabras, la primera vez que lo ejecuta, los datos se migran pero la aplicación falla con el mensaje "El modelo no contiene la configuración 'XYZ'. Luego, la segunda vez funciona bien. Esto, por supuesto, no es una gran experiencia para el usuario, por lo que me vi obligado a adoptar un enfoque en dos etapas como el de Ken. – jfewtr

+0

Además, este enfoque de dos etapas tiene su propio problema, al menos para mí, es decir, una falla la primera (y solo la primera) vez que un usuario cambia a otra aplicación después de migrar los datos. Voy a poner esto en una pregunta separada. – jfewtr

Cuestiones relacionadas