2011-10-02 12 views
20

Estoy realmente atrapado aquí con las pruebas de actualización de v1 a v2 de una aplicación de iPhone. Tengo lanzamientos de IPA que estoy probando a través de una distribución ad hoc a través de iTunes a mi dispositivo iPhone, uno para v1 de la aplicación y otro para v2. Tenga en cuenta que:"No se puede encontrar el modelo para el almacén de origen" que se produce durante el iphone "Migración ligera automática"?

  • v1 instala funciona muy bien en mi dispositivo
  • si elimino v1 y desplegar v2 (así que no hay migración) entonces funciona bien
  • cuando despliego v2 mientras v1 ya está ahí tengo la de error: "la razón = no se puede encontrar el modelo de 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 "disco de teléfono" para mirar mi dispositivo Veo que hay Documentos archivo/MyApp.sqlite

Pregunta - ¿Alguna idea de cómo resolver este? ¿Qué depuración/análisis podría hacer aquí? Avíseme si necesita más información.

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

  • desplegado mi v1 aplicación de la AppStore sin necesidad de crear una versión para mi modelo de datos básicos (es decir, no era realmente consciente en el momento de versiones, por lo no instalar uno)
  • el único cambio adicional para v2 era un nuevo atributo, por un modelo de
  • Así que para la liberación v2 lo que he hecho es:
  • recreó un nuevo modelo de datos Básicos
  • Creado un v1 Versión para el modelo
  • Creado el objeto/atributos para v1
  • guardadas
  • creado una versión v2 para el modelo
  • Creado el atributo adicional
  • guardadas
  • Se reconstruyen las clases de objetos gestionados
  • 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 al llamar a addPersistentStoreWithType

PS versión más completa del error 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 los contenidos del modelo de datos básicos *.directorio de madre/paquete para cada archieve versión 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> 

EDIT: Otra pregunta que no está claro para mí, como lo ha planteado la revisión de la jrturton enlace proporcionado a continuación es:

  1. ¿Cómo hace uno ahora en la última versión de XCode hacer el "Establecer la versión actual" para t él apropiado archivo de versión de modelo? es decir, las publicaciones anteriores resaltan dos pasos diferentes: una Versión de modelo adicional, pero luego por separado "Establecer versión actual"
  2. ¿Cómo se supone que uno use el campo "identificador" de Core Data Model que se puede establecer para cada modelo de datos básicos? archivos. Está en el inspector. El parámetro existe contra, por ejemplo, el modelo MyApp 1.xcdatamodel, MyApp 2.xcdatamodel y MyApp.xcdatamodel, entonces, ¿qué necesita poner en cada uno aquí?
+0

¿Esto ayuda? http://stackoverflow.com/questions/2310216/implementation-of-automatic-lightweight-migration-for-core-data-iphone – jrturton

+0

gracias - el punto 1 y 3 no ayudaron, pero en cuanto al punto 2: ¿usted ¿sabe cómo se llevaría a cabo este punto en la última versión de XCode4? Es decir, "Seleccione su archivo xcdatamodel Diseño -> Modelo de datos -> Agregar versión modelo (expanda su elemento xcdatamodeld) Seleccione el archivo" 2 "(o posterior), Diseño -> Modelo datos -> Establecer versión actual (edite esta versión)" . Voy a elaborar más sobre esto en la parte inferior de mi pregunta ... – Greg

Respuesta

37

Configure la versión de su modelo de datos en el inspector de utilidades (panel derecho), en 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 "Identifier".

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

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

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

+0

gracias jrturton - ¿puedo aclarar por favor (a) por lo que el campo "Identificador" tiene que ser un número entero, supongo? ¿Mientras los valores sigan aumentando? (b) ¿importa el nombre de cada nueva versión del modelo? es decir, XCode coloca automáticamente un número creciente al final de cada archivo nuevo, (c) entonces el primer archivo de modelo xcode crea sin un número al final, podría usarse para v1, entonces supongo ... es que no hay nada especial sobre el primer archivo xcdatamodel crea xcode versus versiones subsiguientes está allí? – Greg

+0

creo que finalmente lo entendí – Greg

+1

@greg Tuve el mismo problema. ¿Puedes explicar lo que debo hacer con "identificador"? En mi versión inicial, no establecí ningún valor para "identificador" ¿eso causa algún problema ?. –

1

Si realizó cambios en su modelo y se aseguró de haber generado un objeto modelo Y no le importa la migración ni está interesado en crear una nueva versión, simplemente necesita hacer un Producto -> Limpiar y eso Por lo general, solucionará este problema.

Si aún tiene este error, localice su base de datos sqlite y elimínela. Cuando lance de nuevo la aplicación, se creará una nueva creada a partir del nuevo modelo.

O bien, 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 se limpiará rápidamente el simulador para que pueda comenzar de nuevo.

3

otra cosa que puede causar esto, es si:

  1. versión maquillaje 2
  2. continuación, editar la versión 1 accidentalmente
  3. luego hacer la versión por defecto 2
  4. se dan cuenta de su cambio no está allí
  5. hacer su cambio de nuevo en la versión 2

obtienes el mismo efecto, porque la versión 1 de la que estás intentando fusionar no es la versión que creó la tienda.

0

Xcode 8, tuve este problema sin hacer la migración

Can't find model for source store

lo que hice es simplemente

Simulator > Reset Content and Settings 
Cuestiones relacionadas