iphone - significado - El modelo utilizado para abrir la tienda es incompatible con el utilizado para crear la tienda
proveedores dropshipping (25)
- Deja de ejecutar la aplicación.
- Eliminar aplicación en el simulador.
-
Product
->Clean
- Construir, correr.
Creé un modelo de Core Data en xcode 3.2 y luego de actualizar en Xcode 4.2, agregué una nueva entidad de la subclase NSManagedObject (consulte la nueva entidad).
En primer lugar, se ve raro porque no está en el mismo grupo que el anterior. Aquí está la imagen en mi xcode 4.2 (AlkitabDB es el que he creado en xcode 3.2, EndeDB es el nuevo de la versión actual de xcode (4.2):
En segundo lugar, lo dejé tal como está, luego accedí a la segunda entidad (la nueva) de la misma manera que a la primera entidad (la anterior) y aparece el error como titulado.
Aquí está el error:
2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}
7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
metadata = {
NSPersistenceFrameworkVersion = 320;
NSStoreModelVersionHashes = {
AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
"_NSAutoVacuumLevel" = 2;
};
reason = "The model used to open the store is incompatible with the one used to create the store";
}
Busqué la solución antes y descubrí que debería eliminar la aplicación del simulador y volver a ejecutar la aplicación, y no funcionó. ¿Alguien sabe una solución para este problema? Por favor ayuda.
Acabo de eliminar el archivo [Simulator App Folder]/Document/*.sqlite
después de hacer cambios en las entidades y funcionó. Y, por supuesto, el archivo .sqlite contiene todos los datos almacenados y las estructuras que se perderán.
Acabo de pasar varios días luchando contra este error, así como fusiones fusionadas deModeloFromBundles y obteniendo el error "No se pueden fusionar modelos con dos entidades diferentes denominadas *".
Resultó que el problema principal era que Xcode no eliminaba los recursos antiguos de los dispositivos y tenía versiones antiguas de mi modelo de datos (archivos .mom) que causaban conflictos. Esta es la razón por la que eliminar la aplicación solucionó el problema en uno de mis dispositivos.
Después de encontrar esta publicación de blog a través de otra respuesta de SO hice que mi aplicación fuera más tolerante con los modelos antiguos al cambiar esta línea que busca TODOS los archivos .mom:
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
a esto, que solo se ve en el directorio de Filtros:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Filters" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
Usé recursivePathsForResourcesOfType a partir de esta pregunta : para ayudar a resolver esto, inicie sesión todos los archivos .mom en la aplicación:
NSArray *momPaths = [self recursivePathsForResourcesOfType:@"mom" inDirectory:[[NSBundle mainBundle] resourcePath]];
NSLog(@"All .mom files:%@",momPaths);
También utilicé iExplorer para ver los archivos .mom extraños (no intenté borrarlos todavía).
El método a continuación también fue útil. Demostró que una entidad estaba en el modelo fusionado devuelto por [psc managedObjectModel] que ya no existía en ninguno de mis modelos ni en la propia tienda. Esto fue lo que me permitió creer que un viejo modelo estaba siendo almacenado en caché en el dispositivo mismo que el edificio limpio no eliminó. El método registra cada entidad que es la misma, ha sido modificada, agregada o eliminada del modelo. (escrito con esta respuesta SO como punto de partida):
- (BOOL)comparePersistentStore:(NSPersistentStoreCoordinator *)psc withStoreURL: (NSURL *)storeURL {
NSError *error = nil;
// Get the entities & keys from the persistent store coordinator
NSManagedObjectModel *pscModel = [psc managedObjectModel];
NSDictionary *pscEntities = [pscModel entitiesByName];
NSSet *pscKeys = [NSSet setWithArray:[pscEntities allKeys]];
//NSLog(@"psc model:%@", pscModel);
//NSLog(@"psc keys:%@", pscKeys);
NSLog(@"psc contains %d entities", [pscModel.entities count]);
// Get the entity hashes from the storeURL
NSDictionary *storeMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType
URL:storeURL
error:&error];
NSDictionary *storeHashes = [storeMetadata objectForKey:@"NSStoreModelVersionHashes"];
//NSLog(@"store metadata:%@", sourceMetadata);
NSLog(@"store URL:%@", storeURL);
NSLog(@"store NSStoreUUID:%@", [storeMetadata objectForKey:@"NSStoreUUID"]);
NSLog(@"store NSStoreType:%@", [storeMetadata objectForKey:@"NSStoreType"]);
NSSet *storeKeys = [NSSet setWithArray:[storeHashes allKeys]];
// Determine store entities that were added, removed, and in common (to/with psc)
NSMutableSet *addedEntities = [NSMutableSet setWithSet:pscKeys];
NSMutableSet *removedEntities = [NSMutableSet setWithSet:storeKeys];
NSMutableSet *commonEntities = [NSMutableSet setWithSet:pscKeys];
NSMutableSet *changedEntities = [NSMutableSet new];
[addedEntities minusSet:storeKeys];
[removedEntities minusSet:pscKeys];
[commonEntities minusSet:removedEntities];
[commonEntities minusSet:addedEntities];
// Determine entities that have changed (with different hashes)
[commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
NSData *storeHash = [storeHashes objectForKey:key];
NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
if ( ! [pscDescrip.versionHash isEqualToData:storeHash]) {
if (storeHash != nil && pscDescrip.versionHash != nil) {
[changedEntities addObject:key];
}
}
}];
// Remove changed entities from common list
[commonEntities minusSet:changedEntities];
if ([commonEntities count] > 0) {
NSLog(@"Common entities:");
[commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
NSData *storeHash = [storeHashes objectForKey:key];
NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
NSLog(@"/t%@:/t%@", key, pscDescrip.versionHash);
}];
}
if ([changedEntities count] > 0) {
NSLog(@"Changed entities:");
[changedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
NSData *storeHash = [storeHashes objectForKey:key];
NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
NSLog(@"/tpsc %@:/t%@", key, pscDescrip.versionHash);
NSLog(@"/tstore %@:/t%@", key, storeHash);
}];
}
if ([addedEntities count] > 0) {
NSLog(@"Added entities to psc model (not in store):");
[addedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
NSLog(@"/t%@:/t%@", key, pscDescrip.versionHash);
}];
}
if ([removedEntities count] > 0) {
NSLog(@"Removed entities from psc model (exist in store):");
[removedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
NSData *storeHash = [storeHashes objectForKey:key];
NSLog(@"/t%@:/t%@", key, storeHash);
}];
}
BOOL pscCompatibile = [pscModel isConfiguration:nil compatibleWithStoreMetadata:storeMetadata];
NSLog(@"Migration needed? %@", pscCompatibile?@"no":@"yes");
return pscCompatibile;
}
uso: llamado antes de agregar cada tienda a NSPersistentStoreCoordinator:
[self comparePersistentStore:self.psc withStoreURL:self.iCloudStoreURL];
_iCloudStore = [self.psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:self.iCloudStoreURL
options:options
error:&localError];
Aunque a veces puede simplemente eliminar la aplicación del dispositivo al cambiar el esquema en el modelo de objetos administrados, en algunos casos esto no es posible, por ejemplo, porque ya ha publicado su aplicación con un esquema anterior.
Si este es el caso, debe tener cuidado de migrar los datos antiguos al nuevo esquema:
Cada vez que realice un cambio en la definición de Fecha Core, debe eliminar las aplicaciones instaladas en el dispositivo físico o simulador.
Cuando se modifican los datos centrales, (agregando un campo a la tabla, eliminando el campo, etc.), el archivo sqlite en la carpeta del documento de aplicaciones debe estar sincronizado con su esquema.
Este archivo no se sobrescribe de forma predeterminada, este archivo debe regenerarse.
Sigue estos pasos:
Vaya a la carpeta señalada por NSURL. (Esta ruta se puede encontrar en un mensaje de excepción generado por la aplicación antes de bloquearse). Ejemplo: / Usuarios // Biblioteca / Soporte de aplicaciones / Simulador de iPhone // Aplicaciones // Documentos
eliminar o cambiar el nombre del archivo sqlite
- Limpiar y volver a ejecutar la aplicación
- La ejecución de la aplicación generaría un nuevo archivo sqlite.
Esto asegurará que el esquema y Xcode estén sincronizados.
En primer lugar, las únicas cosas que deberían estar en el paquete xcdatamodel
son los archivos xcdatamodel
. Tus subclases NO deberían estar en el xcdatamodeld
. Saca esos de allí. Hay una buena probabilidad de que estén confundiendo al compilador.
Segundo, el error indica que Core Data no puede encontrar su modelo. ¿Has creado datos y luego tocado el modelo? De ser así, se encuentra en un estado incoherente y necesita corregirlo, ya sea borrando los datos (sugeridos por Philippe) o modificando los cambios del modelo ATRÁS .
Este problema generalmente ocurre debido a la incompatibilidad entre la versión en la que se ha creado DB . El enfoque general a este problema es eliminar la aplicación y reinstalarla . Pero en su caso mencionado, la versión de DB es completamente diferente en Xcode 3.2 y 4.2. Así que mejor use la misma versión de Xcode para DB.
Experimenté el mismo problema con mi aplicación (aún no lanzada en App Store).
Así es como lo arreglé:
- Ejecutar limpio (Cmd + Shift + K)
- Reiniciar iOS Simulator
- Simulador de iOS -> Restablecer contenido y configuración (desde la barra de navegación)
(3) fue el paso que finalmente lo hizo funcionar correctamente. ¡Espero que esto ayude!
La solución más simple que funcionó para mí en Swift 2.1, Xcode 7 es:
Elimina la aplicación del simulador (Cmd + Shift + H para ir a la pantalla de inicio. Pulsa prolongadamente la aplicación, haz clic en cruzar, del modo habitual en que eliminas una aplicación de tu teléfono)
Cmd + Shift + H nuevamente para detener el baile de aplicaciones
Regrese a su proyecto y vuelva a ejecutar
Tuve este problema al escribir / leer desde Core Data con 2 entidades configuradas. Eliminar la aplicación y volver a ejecutar el programa solucionó el problema
Me estaba dando el error, pero la razón por la que recibí el error fue por lo siguiente.
Originalmente tenía una Entidad llamada "Entrada" y tenía una fila guardada para esa entidad en la base de datos. Luego agregué otra Entidad llamada "Persona" y después de agregar eso fui a compilar y obtuve el error. Así que resolví el problema borrando la entidad "Persona" y luego compilando la aplicación, borré la fila que estaba en "Entrada" y luego cerré la aplicación. Luego eliminé completamente la aplicación de mi teléfono y luego hice una reconstrucción y funcionó bien. No estoy seguro de qué paso corrigió el problema (la eliminación de la fila o la aplicación), pero con suerte si está buscando una solución, esto ayudará. :)
Editar: Ah, y si le preocupaba eliminar su nueva Entidad (en mi caso, "Persona") para volver a crear la aplicación, recuerde que puede recuperarla después utilizando CMD + Z.
Para el desarrollo de aplicaciones Mac:
- Limpia el proyecto
- Limpiar datos derivados
- Vaya a / Users / YOUR_NAME / Library / Containers / YOUR_APP_BUNDLE_ID / Data / Documents / y elimine todos los archivos dentro (como ".sqlite", ".sqlite-shm" ...)
Me funcionó, espero que esto pueda ser útil.
Para swift, en AppDelegate.swift encuentra la línea
try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration: nil, URL: url, options: nil )
y reemplazarlo con
try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])
Por favor, elimine una aplicación del simulador y limpie un código y ejecute .it funcione bien. ¿Puede ser su ayuda?
Prueba "Restablecer contenido y configuración" en el simulador. Funcionó para mí después de eliminar la aplicación y la construcción limpia
Retire la aplicación del simulador y realice una limpieza en su proyecto. Eso debería aclarar esos problemas. Asegúrese de que no esté ejecutándose en el depurador cuando elimine la aplicación o de lo contrario no la eliminará correctamente.
Si quiere asegurarse de que no esté, consulte este directorio Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/
para la carpeta de su aplicación, bajo la versión que está ejecutando.
Nota: Esto es solo para desarrollo. Para la producción, debe implementar algún tipo de migración. Google "Core Data Migration", con la migración ligera es la más simple.
Sí. Una vez que eliminas la aplicación en el dispositivo físico y la reconstruyes, funciona.
Si estás usando Swift.
Siga la respuesta de @Stas e inserte opciones, en lugar de cero, en su delegado de la aplicación:
let myOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true]
if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: myOptions, error: &error) == nil {
Si realiza cambios en su modelo de Datos centrales, debe proporcionar una política de migración que le indique a Core Data cómo adoptar objetos persistentes existentes (que sus usuarios crearon con la versión actualmente disponible) para el nuevo modelo.
Para algunos escenarios, Core Data puede inferir automáticamente la asignación del modelo anterior al nuevo. Para cambios más complejos, es posible que deba implementar alguna lógica que realice la migración.
Los detalles se pueden encontrar en la developer.apple.com/library/ios/#documentation/cocoa/Conceptual/… .
Actualizar
Esta respuesta aquí en cubre los aspectos básicos de la migración liviana de Core Data y también tiene un código para comenzar.
Simplemente agregue el atributo Opciones al crear persistentStoreCoordinator en el archivo AppDelegate.m para el método de datos básicos como se muestra a continuación
C OBJETIVO
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil)
{
return _persistentStoreCoordinator;
}
NSLog(@"persistentStoreCoordinator___");
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
NSLog(@"persistentStoreCoordinator___2");
return _persistentStoreCoordinator;
}
RÁPIDO
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
// The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
// Create the coordinator and store
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")
var failureReason = "There was an error creating or loading the application''s saved data."
// MAIN LINE OF CODE TO ADD
let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true]
do {
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)
} catch {
// Report any error we got.
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application''s saved data"
dict[NSLocalizedFailureReasonErrorKey] = failureReason
dict[NSUnderlyingErrorKey] = error as NSError
let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog("Unresolved error /(wrappedError), /(wrappedError.userInfo)")
abort()
}
return coordinator
}
Había resuelto mi problema ...
Simulador iOS -> Restablecer contenido y configuración ...
Trabajó para mi
Simulador iOS -> Restablecer contenido y configuración ... -> Restaurar funciona en iOS9 (xcode 7.1) también
Tendrá que migrar el modelo de datos principales mediante la migración. Cada vez que cambia el modelo, lo hace incompatible sin versiones. Ponte el cinturón, es un tema un poco peludo.
developer.apple.com/library/ios/#documentation/cocoa/Conceptual/…
Tuve este problema: primero reinicié mi simulador y luego limpio el proyecto y reconstruyo. Y luego funciona.
¡Eliminar la aplicación a veces no es el caso! ¡Sugiere que tu aplicación ya ha sido publicada! No puede simplemente agregar una nueva entidad a la base de datos y seguir adelante; ¡necesita realizar la migración!
Para aquellos que no quieren profundizar en la documentación y están buscando una solución rápida:
- Abra su archivo .xcdatamodeld
- haga clic en Editor
- seleccione Agregar versión de modelo ...
- Agregue una nueva versión de su modelo (se agrega el nuevo grupo de modelos de datos)
- seleccione el archivo principal, abra el inspector de archivos (panel derecho)
- y en el
Versioned core data model
seleccione su nueva versión del modelo de datos para el modelo de datos actual - ESO NO ES TODO) Debería realizar la llamada "migración ligera".
- Vaya a su
AppDelegate
y encuentre dónde se está creandopersistentStoreCoordinator
- Encuentre esta línea
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
- Reemplace las opciones
nil
con@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}
(en realidad se proporciona en el código comentado en ese método) - ¡Aquí tienes, diviértete!
PD Esto solo se aplica a la migración liviana. Para que su migración califique como migración ligera, sus cambios deben limitarse a esta banda estrecha:
- Agregar o eliminar una propiedad (atributo o relación).
- Hacer una propiedad no opcional opcional.
- Establezca un atributo opcional no opcional, siempre que proporcione un valor predeterminado.
- Agregar o eliminar una entidad.
- Cambiar el nombre de una propiedad.
- Renombra una entidad.
Respuesta: elimine la aplicación del simulador, realice una limpieza y vuelva a generar su proyecto.
Nota: Cada vez que realice cambios en la definición de datos centrales, elimine la aplicación instalada en el dispositivo físico o simulador, limpie el proyecto y vuelva a generar de nuevo.