Renombrar el file .xcdatamodeld de conetworkingata y la migration

Tuvimos 2 aplicaciones separadas que hemos fusionado con 2 objectives en el mismo espacio de trabajo. Ambos tenían su model de datos centrales ( app1.xcdatamodeld y app2.xcdatamodeld ).

Ahora que ambos están en el mismo espacio de trabajo, no hay necesidad de 2 models, ya que son un 99% similares. Entonces, quiero cambiar el nombre del package allApps.xcdatamodeld a allApps.xcdatamodeld . Pude cambiar el nombre, pero no encuentro ninguna reference sobre el comportamiento de la migration al hacerlo.

Este es el error

 2015-07-28 09:04:06.079 AppName[51306:1423128] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/shani/Library/Developer/CoreSimulator/Devices/EA75A69F-B108-4036-AB3D-B923F83D16DE/data/Containers/Data/Application/B1CB3AF3-DEF4-40DF-9A61-721063ECBB1D/Documents/AppName.sqlite options:{ NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; NSSQLitePragmasOption = { "journal_mode" = WAL; }; } ... returned error Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn't be completed. (Cocoa error 134130.)" UserInfo=0x7fc39c194360 {URL=file:///Users/shani/Library/Developer/CoreSimulator/Devices/EA75A69F-B108-4036-AB3D-B923F83D16DE/data/Containers/Data/Application/B1CB3AF3-DEF4-40DF-9A61-721063ECBB1D/Documents/AppName.sqlite, metadata={ NSPersistenceFrameworkVersion = 519; NSStoreModelVersionHashes = { Attempt = <b4d1e878 69a97917 e751a67c 89e1887a ae4df1dc f380e4ee c9585f60 f39ff51e>; BookmarkFlashcard = <33112f7c 2fa20bec eb2e019c b5d619b4 92be2547 a65fabee 1ac86ab7 92dd77bb>; BookmarkQuestion = <38634b49 71f0d43c 6f9fbba9 bc2f1b81 675c9b3c f2da017e fc8de9d8 4e18a4a0>; Category = <b0e4d91b 0c0ebc71 ed0f403c 9a0eec20 fc1686aa 0169bc60 4bcc7e57 165bce15>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "" ); NSStoreType = SQLite; NSStoreUUID = "F1B37CD0-8B89-4893-A262-1013C3544026"; "_NSAutoVacuumLevel" = 2; }, reason=Can't find model for source store} with userInfo dictionary { URL = "file:///Users/shani/Library/Developer/CoreSimulator/Devices/EA75A69F-B108-4036-AB3D-B923F83D16DE/data/Containers/Data/Application/B1CB3AF3-DEF4-40DF-9A61-721063ECBB1D/Documents/AppName.sqlite"; metadata = { NSPersistenceFrameworkVersion = 519; NSStoreModelVersionHashes = { Attempt = <b4d1e878 69a97917 e751a67c 89e1887a ae4df1dc f380e4ee c9585f60 f39ff51e>; BookmarkFlashcard = <33112f7c 2fa20bec eb2e019c b5d619b4 92be2547 a65fabee 1ac86ab7 92dd77bb>; BookmarkQuestion = <38634b49 71f0d43c 6f9fbba9 bc2f1b81 675c9b3c f2da017e fc8de9d8 4e18a4a0>; Category = <b0e4d91b 0c0ebc71 ed0f403c 9a0eec20 fc1686aa 0169bc60 4bcc7e57 165bce15>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "" ); NSStoreType = SQLite; NSStoreUUID = "F1B37CD0-8B89-4893-A262-1013C3544026"; "_NSAutoVacuumLevel" = 2; }; reason = "Can't find model for source store"; } 2015-07-28 09:04:06.089 AppName[51306:1423128] CoreData: annotation: NSPersistentStoreCoordinator's current model hashes are { Attempt = <b4d1e878 69a97917 e751a67c 89e1887a ae4df1dc f380e4ee c9585f60 f39ff51e>; BookmarkFlashcard = <33112f7c 2fa20bec eb2e019c b5d619b4 92be2547 a65fabee 1ac86ab7 92dd77bb>; BookmarkQuestion = <38634b49 71f0d43c 6f9fbba9 bc2f1b81 675c9b3c f2da017e fc8de9d8 4e18a4a0>; Category = <b0e4d91b 0c0ebc71 ed0f403c 9a0eec20 fc1686aa 0169bc60 4bcc7e57 165bce15>; } 

¿Hay alguna forma de cambiar el nombre de nombre1.xdatamodel a name2.xdatamodel en una aplicación que ya está en producción?

Gracias

En lugar de cambiar el nombre de la aplicación1.xcdatamodeld o la aplicación2.xcdatamodeld, debe crear una nueva (allApps.xcdatamodeld). Este nuevo model puede ser solo una copy del model que desee conservar.

Luego, en cada uno de los dos objectives, agregue un file .xcmappingmodel y vincúlelo a allApps.xcdatamodeld y realice las traducciones necesarias.

La forma en que funciona coreData, querrá mantener los files xcdatamodeld app1 y app2 originales para asegurarse de que nunca rompa a un usuario que tenga su aplicación más antigua aún ejecutada en su dispositivo.

Archivo> Nuevo> Archivo> Datos básicos> Modelo de asignación. Elija el model de origen y click Siguiente. introduzca la descripción de la imagen aquí

Elija el model de datos de destino y click Siguiente. introduzca la descripción de la imagen aquí

Haz esto nuevamente en tu otro objective para app2 y debes estar bien.

Intente usar versiones y migration ligera ,

Para más sobre el control de versiones y la migration, puede consultar esto.

Si lo anterior no ayuda, inténtelo de esta manera,

En primer lugar, cuando agrega un model de datos centrales en xcode, en realidad obtiene un file .xcdatamodeld que es un package como el file .xcodeproj. En el buscador, puede hacer clic derecho sobre él y "Mostrar contenido del package". Verá que contiene un file .xcdatamodel.

Me parece que no puedes renombrarlo completamente usando xcode. Xcode cambiará el nombre del file del package (el momd) tal como lo ve en la interfaz de usuario, pero en el sistema de files no ha cambiado realmente.

El error del model nil que obtienes es porque no puede encontrar el nombre nuevo de file momd, ya que todavía tiene el nombre anterior en el disco. (Supongo)

Trabajé en esto creando un nuevo model con el nombre que quería, luego en el model existente, puedes hacer clic y arrastrar y seleccionar tus entidades, y luego pegarlas en el nuevo file model. A continuación, puede eliminar el antiguo y enviar todos los cambios a su SCM.

Puede get más ayuda con respecto a los pasos anteriores de este enlace.

Simplemente haga clic con el button derecho en .xcdatamodeld Mostrar en el Finder y Renombrarlo. Retire del package que sale de uno y arrastre y suelte Renombrado .xcdatamodeld, Ahora limpie la compilation, Compruebe antes de ejecutar la relación entre los models si tiene y Ejecutar de nuevo.