El modelo utilizado para abrir la tienda es incompatible con el utilizado para crear la tienda.

181

Creé un modelo de Core Data en xcode 3.2 y después de actualizar en Xcode 4.2, luego agregué una nueva entidad de la subclase NSManagedObject (consulte la nueva entidad).

Lo primero, 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 creé en xcode 3.2, EndeDB es el nuevo de la versión actual de xcode (4.2):

la nueva entidad no se agrupa en xdatamodel

En segundo lugar, lo dejé como está, luego accedí a la segunda entidad (la nueva) de la misma manera que la primera entidad (la antigua), y aparece el error como se titula.

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.

dejoong
fuente

Respuestas:

294

¡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 continuar, ¡debe realizar la migración!

Para aquellos que no quieren profundizar en la documentación y están buscando una solución rápida:

  1. Abra su archivo .xcdatamodeld
  2. haga clic en Editor
  3. seleccione Agregar versión del modelo ...
  4. Agregue una nueva versión de su modelo (se agregó el nuevo grupo de modelos de datos)
  5. seleccione el archivo principal, abra el inspector de archivos (panel derecho)
  6. y Versioned core data modelseleccione su nueva versión del modelo de datos para el modelo de datos actual
  7. ESO NO ES TODO) Debería realizar la llamada "migración ligera".
  8. Ve a tu AppDelegatey encuentra dónde persistentStoreCoordinatorse está creando
  9. Encuentra esta línea if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
  10. Reemplazar nilopciones con @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}(realmente proporcionado en el código comentado en ese método)
  11. Aquí tienes, diviértete!

PD: esto solo se aplica a la migración ligera. Para que su migración califique como una 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.
  • Haga que un atributo opcional no sea opcional, siempre que proporcione un valor predeterminado.
  • Agregar o eliminar una entidad.
  • Renombrar una propiedad.
  • Renombrar una entidad.

Para Swift 4

coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])
Stas
fuente
2
El archivo principal es el .xcdatamodel que creó. Debe abrir la primera pestaña de panel Utilidades (mano derecha lado uno) y encontrar "modelo de la versión" (Xcode 5.1) y seleccione actual: ".xcdatamodel su recién creado"
Stas
1
@ Computer_whiz123, en XCode 5.1.1 se llama 'Versión del modelo'
Stas
1
¿Cómo haría esto es Swift?
Addison el
2
Me sale este error: "CoreData: error: -addPersistentStoreWithType: Configuración de SQLite: (nulo) URL: archivo: ///...file.sqlite opciones: {NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1;} ... error de error devuelto Dominio = NSCocoaErrorDomain Código = 134130 "No se pudo completar la operación. (Error de cacao 134130.) "
CarmenA
3
Opciones de migración rápida:let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
HamzaGhazouani
285

Elimina la aplicación del simulador y realiza una limpieza en tu proyecto. Eso debería aclarar esos problemas. Asegúrese de no estar ejecutando en el depurador cuando elimine la aplicación o de lo contrario no la eliminará correctamente.

Si desea asegurarse de que se haya ido, consulte este directorio Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/para la carpeta de su aplicación, en 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", siendo la migración ligera la más simple.

Philippe Sabourin
fuente
thx por Philippe respondió, lo intenté y no funcionó :(, u tiene cualquier otra sugerencia?
dejoong
¿Puede publicar el código que usa para crear el modelo y la tienda persistente en el delegado de su aplicación?
Philippe Sabourin
Es un poco irracional por qué sucede esto y por qué esa solución funciona, pero eso es ... no puedo ayudar ... nywaz, aquí va mi voto ... lo mejor que puedo hacer en este momento para apreciar sus pautas ... muchas gracias por la ayuda compañero. !!
Apple_iOS0304
Me ayudó a resolver un problema en Xcode 4.6, donde envié a la basura todos mis archivos de proyectos por error: /
ramirogm
66
¡Esto es solo para desarrollo! Para la producción, utiliza el control de versiones y la migración de modelos. developer.apple.com/library/ios/#documentation/cocoa/Conceptual/…
Philippe Sabourin
35

Simplemente agregue el atributo Opciones mientras crea 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 ...

Dhaval H. Nena
fuente
1
Gracias por este post realmente útil
Subramani
23

Respuesta: elimine la aplicación del simulador, realice una limpieza y reconstruya su proyecto.

Nota: cada vez que realice cambios en la definición de Core Data, elimine la aplicación instalada en el dispositivo físico o simulador, limpie el proyecto y vuelva a compilar.

Bhavin
fuente
Restablecer el contenido y la configuración en el simulador me solucionó el problema. Gracias.
septerr
14

Si. Una vez que elimine la aplicación en el dispositivo físico y la reconstruya, funciona.

world-software.net
fuente
Esto realmente resolvió mi problema en lugar de la respuesta aceptada. ¡Gracias!
Ken W
lo que sucede en la producción no es la respuesta
Eduardo Oliveros
Esta es una respuesta horrible, debe agregar la migración a su nuevo modelo, de lo contrario, la aplicación se bloqueará en prod
aryaxt
14

Para swift, en AppDelegate.swift encuentre 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])
Ali Asgher Lakkadshaw
fuente
11

Acabo de pasar varios días combatiendo este error, así como los bloqueos fusionados de ModelFromBundles y obteniendo el error "No se pueden fusionar modelos con dos entidades diferentes llamadas *".

Resulta que el problema raíz era que Xcode no elimina los recursos antiguos de los dispositivos y tenía versiones antiguas de mi modelo de datos (archivos .mom) que causaban conflictos. Es por eso 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 SO, hice que mi aplicación sea 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];

Utilicé recursivePathsForResourcesOfType de esta pregunta : para ayudar a resolver esto al registrar 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 (aún no intenté eliminarlos).

El siguiente método también fue útil. Mostró que una entidad estaba en el modelo combinado devuelto por [psc managedObjectModel] que ya no existía en ninguno de mis modelos o en la tienda misma. Esto fue lo que me permitió creer que un modelo antiguo estaba siendo almacenado en caché en el dispositivo que el edificio limpio no eliminó. El método registra cada entidad que es la misma, se ha cambiado, agregado o eliminado 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];
Simétrico
fuente
10

Cada vez que realice un cambio en la definición de Fecha de núcleo, debe eliminar las aplicaciones instaladas en el dispositivo físico o simulador.

pierrotlefou
fuente
20
¿Qué pasa con las aplicaciones de producción? ¿Se bloquearán instantáneamente si envía una actualización a la tienda de aplicaciones con cambios en Core Data? Thx
rwyland
3
Sí, los cambios en el modelo de CD impiden que se carguen los datos generados con el modelo anterior. Para manejar esto, debe detectar el problema y realizar una migración de datos principales.
Johan
8
  1. Deje de ejecutar la aplicación.
  2. Eliminar la aplicación en el simulador.
  3. Product -> Clean
  4. Construye, corre.
Tom Howard
fuente
44
mala práctica en la producción, bloquea la aplicación
Eduardo Oliveros
7

La solución más simple que funcionó para mí en Swift 2.1, Xcode 7 es:

  1. Elimine la aplicación del simulador (Cmd + Shift + H para ir a la pantalla de inicio. Mantenga presionada la aplicación, haga clic en cruz, de la forma habitual en que elimina una aplicación de su teléfono)

  2. Cmd + Shift + H nuevamente para detener el baile de aplicaciones

  3. 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

Naishta
fuente
2
las malas prácticas en la producción, bloquee la aplicación
Eduardo Oliveros
6

Acabo de eliminar el [Simulator App Folder]/Document/*.sqlitearchivo 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.

AHHP
fuente
2
A mí también me funcionó. Parece razonable que esto sea suficiente. Sin embargo, usted pierde todos los datos en el DB ...
bor
6

Elimine una aplicación del simulador y limpie un código y ejecute. Funciona bien. Puede ser su ayuda USTED.

sarit bahuguna
fuente
6

Si está usando Swift.

Siga la respuesta de @Stas e inserte opciones, en lugar de cero, en su Delegado de aplicaciones:

let myOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
            NSInferMappingModelAutomaticallyOption: true]
        if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: myOptions, error: &error) == nil {
JZ
fuente
1
No estoy seguro de por qué eso fue rechazado, pero lo he corregido. Gracias por proporcionar la sintaxis para Swift.
Matt Long
¡Agradable! ¡Funciona! ¡gracias! Estoy tratando de resolver este problema durante 3 horas.
mr_ivan777
¿Dónde poner este código? cargo datos centrales con este código let container = NSPersistentContainer (nombre: "modeldb") container.loadPersistentStores (completeHandler: {(storeDescription, error) en si let error = error como NSError? {
MAS. John
5

Pruebe "Restablecer contenido y configuración" en el simulador. Me funcionó después de eliminar la aplicación y la compilación limpia

Josh10
fuente
3
Sin embargo, si hace esto, ¿no ocurrirá el mismo problema para los usuarios de máquinas reales?
Maury Markowitz
4

Experimenté el mismo problema con mi aplicación (aún no lanzada en App Store).

Así es como lo arreglé:

  1. Ejecutar limpio (Cmd + Shift + K)
  2. Reiniciar simulador de iOS
  3. 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!

bigtex777
fuente
2

Aunque a veces puede eliminar la aplicación del dispositivo al cambiar el esquema en el modelo de objeto administrado, en algunos casos esto no es posible, por ejemplo, porque ya publicó su aplicación con un esquema antiguo.

Si este es el caso, debe encargarse de migrar datos antiguos al nuevo esquema:

Versiones del modelo de datos principales y migración de datos

Miguel
fuente
2

Si realiza cambios en su modelo de Core Data, 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 lanzada actualmente) al nuevo modelo.

Para algunos escenarios, Core Data puede inferir automáticamente el mapeo del modelo antiguo 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 Guía de programación de versiones y migración de datos del modelo de datos principales .

Actualización
Esta respuesta aquí en Stack Overflow cubre los conceptos básicos de la migración liviana de Core Data y también tiene algo de código para comenzar.

Thomas Zoechling
fuente
Aquí está mi respuesta para lo mismo para la migración de datos: stackoverflow.com/questions/8881453/…
Dhaval H. Nena
1

Este problema generalmente ocurre debido a la incompatibilidad entre la versión en la que se ha creado DB . El enfoque general de 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.

Jayprakash Dubey
fuente
1

Primero, lo único que debería estar en el xcdatamodeldpaquete son los xcdatamodelarchivos. Sus subclases NO deben estar en el xcdatamodeld. Mueve esos fuera de allí. Existe una buena posibilidad de que estén confundiendo al compilador.

En segundo lugar, el error indica que Core Data no puede encontrar su modelo. ¿Ha creado datos y luego tocó el modelo? Si es así usted está en un estado incoherente y debe arreglar que, o bien mediante la supresión de los datos (que Philippe sugerido) o haciendo rodar los cambios del modelo VOLVER .

Marcus S. Zarra
fuente
¿Tienes idea de cómo puedo sacar el modelo del paquete xcdatamodel? o shd lo acabo de eliminar?
Dejoong
El modelo, que es el xcdatamodelarchivo, debería estar allí. Son los archivos .h y .m los que deben moverse. Buscador de uso.
Marcus S. Zarra
0

Estaba recibiendo 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 fue a construir y obtuve el error. Así que resolví el problema eliminando la Entidad "Persona" y luego creando la aplicación, eliminé la fila que estaba en "Entrada" y luego cerré la aplicación. Luego eliminé la aplicación por completo 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 espero que si está buscando una solución, esto ayude. :)

Editar: Ah, y si te preocupaba eliminar tu nueva Entidad (en mi caso, "Persona") para construir la aplicación nuevamente, ¡recuerda que puedes recuperarla luego usando CMD + Z!

daveomcd
fuente
0

Tuve este problema: primero reinicié mi simulador y luego limpié el proyecto y lo reconstruí. Y luego funciona.

Yashu
fuente
0

Cuando cambia los datos principales (agregar un campo a la tabla, eliminar un campo, etc.), el archivo sqlite en la carpeta de documentos de la aplicación debe estar sincronizado con su esquema.

Este archivo no se sobrescribe de forma predeterminada, este archivo debe regenerarse.

Sigue estos pasos:

  1. Vaya a la carpeta señalada por NSURL. (Esta ruta se puede encontrar en el mensaje de excepción generado por la aplicación antes de fallar). Ejemplo: / Usuarios // Biblioteca / Soporte de aplicaciones / iPhone Simulator // Aplicaciones // Documentos

  2. eliminar o cambiar el nombre del archivo sqlite

  3. Limpia y vuelve a ejecutar la aplicación
  4. Volver a ejecutar la aplicación generaría un nuevo archivo sqlite.

Esto asegurará que el esquema y Xcode estén sincronizados.

Prashant Nidgunde
fuente
-1

Para el desarrollo de aplicaciones mac:

  1. Limpiar el proyecto
  2. Datos derivados limpios
  3. Vaya a / Users / YOUR_NAME / Library / Containers / YOUR_APP_BUNDLE_ID / Data / Documents / y elimine todos los archivos dentro (como ".sqlite", ".sqlite-shm" ...)

Funcionó para mí, espero que esto pueda ser útil.

Eneko
fuente
-2

Simulador de iOS -> Restablecer contenido y configuración ...

Trabajó para mi

Simulador de iOS -> Restablecer contenido y configuración ... -> Restablecer también funciona en iOS9 (xcode 7.1)

niravdesai21
fuente
44
las malas prácticas en la producción, bloquee la aplicación
Eduardo Oliveros