"No se puede encontrar el model para la tienda de origen" que se produce durante el iphone "Migración ligera automática"?

Estoy realmente atrapado aquí con las testings de actualización de v1 a v2 de una aplicación de iPhone. Tengo lanzamientos IPA que estoy probando a través de la distribución ad hoc a través de iTunes en mi dispositivo iPhone, uno para v1 de la aplicación y otro para v2. Tenga en count que:

  • Las instalaciones de v1 funcionan bien en mi dispositivo
  • si elimino v1 y despliego v2 (por lo que no hay migration), entonces funciona bien
  • cuando despliego v2 mientras v1 ya está allí, aparece el error: "razón = No se puede encontrar el model para el almacén de origen"

Un fragment del error … *

reason=**Can't find model for source store**}, { URL = "file://localhost/var/mobile/Applications/AAAAF424-D6ED-40FE-AB8D-66879386739D/Documents/MyApp.sqlite"; metadata = { NSPersistenceFrameworkVersion = 320; <cut> 
  • cuando uso el "disco del teléfono" para mirar mi dispositivo, veo que hay un file Documents / MyApp.sqlite

Pregunta : ¿Alguna idea de cómo resolver esto? ¿Qué debugging / análisis podría hacer aquí? Avísame si necesitas más información.

Lo que he hecho como una descripción general es:

  • Implementé mi aplicación v1 en AppStore sin configurar una versión para mi model de datos básicos (es decir, no estaba realmente al tanto de las versiones, por lo que no configuré una)
  • El único cambio adicional para v2 fue un nuevo atributo en un model
  • Entonces, para la versión v2, lo que he hecho es:
  • Recrearon un nuevo model de datos principales
  • Creado una versión v1 para el model
  • Creado el object / attributes para v1
  • Salvado
  • Creado una versión v2 para el model
  • Creado el atributo adicional
  • Salvado
  • Recreado las classs de object administrado
  • Se actualizó el código para poner las opciones en http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1 cuando llamando a addPersistentStoreWithType

PS versión completa de error si esto ayuda – esta vez se trata de simular el error de migration en el simulador

 , reason=Can't find model for source store}, { URL = "file://localhost/Users/greg/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/69FDFDCF-631D-4191-B852-CD75151B1EA9/Documents/MyApp.sqlite"; metadata = { NSPersistenceFrameworkVersion = 320; NSStoreModelVersionHashes = { Config = <5f92f988 71e11a66 554ae924 61887562 22b8de8a c318b110 e3e4a569 81adafa2>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "" ); NSStoreType = SQLite; NSStoreUUID = "3B9832DA-E3A1-431B-83E8-43431A7F3452"; }; reason = "Can't find model for source store"; } 

PSS Si esto ayuda a los contenidos del model de datos principales * .mom, el directory / package para cada versión archieve son:

v1

 -rw-r--r-- 1 greg staff 1664 5 Sep 21:06 MyApp.mom -rw-r--r-- 1 greg staff 2656 5 Sep 21:06 MyApp.omo -rw-r--r-- 1 greg staff 480 5 Sep 21:06 VersionInfo.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd>"> <plist version="1.0"> <dict> <key>NSManagedObjectModel_CurrentVersionName</key> <string>MyApp</string> <key>NSManagedObjectModel_VersionHashes</key> <dict> <key>MyApp</key> <dict> <key>Config</key> <data> X5L5iHHhGmZVSukkYYh1YiK43orDGLEQ4+SlaYGtr6I= </data> </dict></dict></dict> </plist> 

v2

 -rw-r--r-- 1 greg staff 497 2 Oct 12:47 MyApp 1.mom -rw-r--r-- 1 greg staff 1601 2 Oct 12:47 MyApp 2.mom -rw-r--r-- 1 greg staff 1695 2 Oct 12:47 MyApp.mom -rw-r--r-- 1 greg staff 2920 2 Oct 12:47 MyApp.omo -rw-r--r-- 1 greg staff 665 2 Oct 12:47 VersionInfo.plist <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd>"> <plist version="1.0"> <dict> <key>NSManagedObjectModel_CurrentVersionName</key> <string>MyApp</string> <key>NSManagedObjectModel_VersionHashes</key> <dict> <key>MyApp</key> <dict> <key>Config</key> <data> Z/n8092QBHPfBwInZvIm1lei53T1UtZhpNzjl3JA0gs= </data> </dict> <key>MyApp 1</key> <dict/> <key>MyApp 2</key> <dict> <key>Config</key> <data> Fih24clI+kZszFd3X6Gm8itq8YDxudiKnjHW8ydNmps= </data> </dict></dict></dict> </plist> 

EDITAR: Otra pregunta que no está clara para mí, tal como se planteó al revisar el enlace jrturton que se proporciona a continuación es:

  1. ¿Cómo hace uno ahora en la última versión de XCode hacer el "Establecer Versión Actual" al file de versión de model apropiado? es decir, los posts anteriores resaltan dos pasos diferentes que son una versión del model agregado, pero luego por separado "Establecer versión actual"
  2. ¿Cómo se supone que se debe utilizar el campo "Identificador" del Modelo de Datos del Núcleo que se puede configurar para cada uno de los files del model de datos del núcleo. Está en el inspector. El parámetro existe, por ejemplo, en el file MyApp 1.xcdatamodel, MyApp 2.xcdatamodel y MyApp.xcdatamodel, así que ¿qué necesita poner en cada uno aquí?

Configura la versión de su model de datos en el inspector de Utilidades (panel derecho), debajo de la pestaña Identidad y Tipo cuando se selecciona el file xcdatamodeld. Esto tiene una sección llamada "Modelo de datos básicos" y un campo llamado "Identificador".

Agregue una nueva versión de model seleccionando el file xcdatamodeld, yendo a Editor -> Agregar versión de model.

En este punto, se le solicita que el model anterior lo base en.

Si ha agregado un nuevo model sin pasar por este process, la migration ligera puede no funcionar.

otra cosa que puede causar esto es si usted:

  1. hacer la versión 2
  2. luego edite la versión 1 accidentalmente
  3. luego haga que la versión 2 por defecto
  4. darse count de que tu cambio no está ahí
  5. vuelva a hacer su cambio en la versión 2

obtienes el mismo efecto, porque la versión 1 que intentas combinar no es la versión que creó la tienda.

Si realizó cambios en su model y se aseguró de que generó un object model Y no le importa la migration ni está interesado en hacer una nueva versión, simplemente necesita hacer un Producto -> Limpiar y eso normalmente solucionará esto problema.

Si aún tiene este error, busque su database sqlite y bórrelo. Cuando vuelvas a ejecutar la aplicación, creará una nueva creada a partir del nuevo model.

Alternativamente, puede eliminar la aplicación del simulador o, si todo lo demás falla, toque "Configuración de iOS" en la parte superior del simulador y select "Restablecer contenido y configuration …" y borrará rápidamente el simulador para que pueda comenzar Fresco.

Xcode 8 , tuve este problema sin hacer migration

No se puede encontrar el model para la tienda de origen.

lo que hice es simplemente

 Simulator > Reset Content and Settings