iphone xcode version-control core-data mapping-model

iphone - Sigo recibiendo "error de operación de salvar" después de cualquier cambio en mi modelo de datos XCode



version-control core-data (8)

¿Tiene las opciones NSMigratePersistentStoresAutomaticallyOption y NSInferMappingModelAutomaticallyOption establecidas cuando crea su persistentStoreCoordinator en el delegado de la aplicación?

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator != nil) { return persistentStoreCoordinator; } NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"database.sqlite"]]; NSError *error = nil; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]]; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { // Handle error } return persistentStoreCoordinator; }

Empecé a usar Core Data para el desarrollo de iPhone. Empecé creando una entidad muy simple (llamada Evaluación) con solo una propiedad de cadena (llamada evaluaciónTópico). Tenía el siguiente código para insertar una nueva cadena:

- (void)insertNewObject { // Create a new instance of the entity managed by the fetched results controller. NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity]; NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; // If appropriate, configure the new managed object. [newManagedObject setValue:@"My Repeating String" forKey:@"evaluationTopic"]; // Save the context. NSError *error; if (![context save:&error]) { // Handle the error... } [self.tableView reloadData]; }

Esto funcionó perfectamente bien y presionando el botón + se agregará una nueva "Mi cadena de repetición" a la vista de tabla y estará en la tienda persistente.

Luego presioné "Diseño -> Agregar versión de modelo" en XCode. Agregué tres entidades a la entidad existente y también agregué nuevas propiedades a la entidad "Evaluación" existente. Luego, creé nuevos archivos de las entidades presionando "Archivo -> Nuevo archivo -> Clases de objetos gestionados" y creé un nuevo archivo .h y .m para mis cuatro entidades, incluida la entidad "Evaluación" con Evaluation.h y Evaluation. .metro. Ahora cambié la versión del modelo configurando "Diseño -> Modelo de datos -> Establecer versión actual". Después de haber hecho todo esto, cambié mi método InsertMethod:

- (void)insertNewObject { // Create a new instance of the entity managed by the fetched results controller. NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity]; Evaluation *evaluation = (Evaluation *) [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; // If appropriate, configure the new managed object. [evaluation setValue:@"My even new string" forKey:@"evaluationSpeechTopic"]; // Save the context. NSError *error; if (![context save:&error]) { // Handle the error... } [self.tableView reloadData]; }

¡Esto no funciona! Cada vez que quiero agregar una fila, el simulador falla y obtengo lo siguiente:

"NSInternalInconsistencyException'', reason: ''This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.''"

Tuve este error antes de saber sobre la creación de una nueva versión después de cambiar algo en el modelo de datos, pero ¿por qué sigue apareciendo? ¿Debo hacer algún mapeo (aunque acabo de agregar entidades y propiedades que no existían antes?). En el tutorial de Apple Dev suena muy fácil, pero he estado luchando con esto durante mucho tiempo, nunca funcionó después de cambiar la versión del modelo.


Eliminar y volver a instalar la aplicación en ambos, simulador y dispositivo, funcionó para mí.


La respuesta de Michael se ajustaba a mi caso.
Modifiqué el modelo de datos básicos y comencé a recibir este error.
Mi solución fue eliminar la aplicación (mantener presionada la tecla HOME y CRUZAR la aplicación) y volver a cargar la aplicación. ¡Problema resuelto!


Si solo obtiene este error en el simulador, ha cambiado su modelo de datos y no ha eliminado el archivo sqlite que estaba utilizando anteriormente.

Vaya a: ~/Library/Application Support/iPhone Simulator/User/Applications/

Luego mira a través de las carpetas con el nombre HEX hasta que veas tu aplicación. Abra el directorio de Documents y elimine el archivo sqlite. El error debería desaparecer


También puede intentar "Restablecer contenido y configuración ..." en el simulador. Eso es lo que funcionó para mí.


Tenía el mismo problema y solía funcionar, hasta que copié el código en otra carpeta en el buscador y comencé a editar ese proyecto, comenzando a obtener el error. Lo que lo solucionó fue que mi otro proyecto tenía un coordinador de tiendas con el nombre xyz.sqlite, el "nuevo" proyecto en el que estaba trabajando tenía el mismo nombre, tuve que cambiarlo a xyzv2.sqlite (algo así). La respuesta encontrada aquí es: http://www.iphonedevsdk.com/forum/iphone-sdk-development/27268-nspersistentstorecoordinator-has-no-persistent-stores.html


esto se debe a su cambio de base de datos porque en la aplicación hay otra base de datos y en Biblioteca / Soporte de aplicaciones / iPhone Simulator / Usuario / Aplicaciones hay otra base de datos ... así que ELIMINAR el databse de la carpeta de la aplicación funciona para mí.


si está ejecutando esto en el simulador / iphone, también desinstale la aplicación. trabajado para mí en el simulador solo después de que eliminé la aplicación!