usar funciona datos data cuando como ios iphone core-data core-data-migration

ios - funciona - save data to core data swift 4



"¿No se puede encontrar el modelo para la tienda de origen" que ocurre durante la "Migración automática ligera"? (4)

Establece la versión de su modelo de datos en el inspector de utilidades (panel derecho), debajo de la pestaña Identidad y Tipo cuando se selecciona el archivo xcdatamodeld. Esto tiene una sección llamada "Core Data Model", y un campo llamado "Identificador".

Usted agrega una nueva versión del modelo seleccionando el archivo xcdatamodeld, yendo a Editor -> Agregar versión del modelo.

En este punto, se le solicita que el modelo anterior se base.

Si ha agregado un nuevo modelo sin pasar por este proceso, es posible que la migración ligera no funcione.

Estoy realmente atascado aquí con las pruebas de actualización de v1 a v2 de una aplicación de iPhone. Tengo versiones de IPA que estoy probando mediante la distribución ad hoc a través de iTunes a mi dispositivo iPhone, una para v1 de la aplicación y otra para v2. Tenga en cuenta que:

  • Las instalaciones de v1 funcionan bien en mi dispositivo
  • Si elimino v1 e implemento v2 (entonces no hay migración), entonces funciona bien
  • cuando implemento v2 mientras que v1 ya está allí, aparece el error: "reason = No se puede encontrar el modelo para el almacén de origen"

Un fragmento 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 archivo Documents / MyApp.sqlite

Pregunta - ¿Alguna idea de cómo resolver esto? ¿Qué depuración / análisis podría hacer aquí? Déjame saber si necesitas más información.

Lo que he hecho como resumen es:

  • Desplegué mi aplicación v1 a la AppStore sin configurar una versión para mi modelo de datos central (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 modelo
  • Así que para la versión v2 lo que he hecho es:
  • Recreado un nuevo modelo de datos básicos
  • Creé una versión v1 para el modelo.
  • Creado el objeto / atributos para v1
  • Salvado
  • Creé una versión v2 para el modelo.
  • Creado un atributo adicional
  • Salvado
  • Recreado las clases de objetos gestionados.
  • Se actualizó el código para colocar 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

La versión más completa de error de PS si esto ayuda, esta vez se trata de simular el error de migración 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 que el contenido del directorio / paquete del modelo de datos principal * .mom para cada versión de archivo sea:

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 me queda clara, tal como se plantea al revisar el enlace que se proporciona a continuación es:

  1. ¿Cómo hace uno ahora en la última versión de XCode para "Establecer la versión actual" en el archivo de versión del modelo apropiado? es decir, las publicaciones anteriores resaltan dos pasos diferentes, siendo uno Agregar versión de modelo, pero luego "Establecer versión actual"
  2. ¿Cómo se supone que uno debe usar el campo "Identificador" del Modelo de datos básicos que se puede establecer para cada uno de los archivos de modelos de datos principales? Está en el inspector. El parámetro existe contra, por ejemplo, los archivos MyApp 1.xcdatamodel, MyApp 2.xcdatamodel y MyApp.xcdatamodel, así que, ¿qué necesita poner en cada uno aquí?

Otra cosa que puede causar esto, es si:

  1. hacer versión 2
  2. luego edita la versión 1 accidentalmente
  3. luego hacer la versión 2 por defecto
  4. date cuenta de que tu cambio no está ahí
  5. Haz tu cambio de nuevo en la versión 2

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


Si realizó cambios en su modelo y se aseguró de que generó un objeto modelo Y no le importa la migración ni le interesa hacer una nueva versión, simplemente necesita hacer un Producto -> Limpiar y eso normalmente solucionará este problema. problema.

Si aún tiene este error, ubique su base de datos sqlite y elimínelo. Cuando vuelvas a iniciar la aplicación, se creará una nueva que se construirá a partir del nuevo modelo.

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 seleccione "Restablecer contenido y configuración ..." y borrará rápidamente el simulador para que pueda comenzar Fresco.


Xcode 8 , tuve este problema sin hacer migración

No se puede encontrar el modelo para la tienda de origen

lo que hice es simplemente

Simulator > Reset Content and Settings