tengo una aplicación de iPhone que utiliza CoreData. Recientemente realicé algunos cambios menores en el modelo de datos y ahora, cada vez que se abre la aplicación, aparece el error "No se puede encontrar el modelo para la tienda de origen".migración iPhone CoreData falla con "No se puede encontrar el modelo de almacén de origen"
tengo la versión 2 del modelo de datos y los únicos cambios que he hecho había algunas adiciones de algunos campos. Estaba siguiendo la guía here que funcionó inicialmente, luego solo hoy, después de agregar algunos campos adicionales, se rompe. Todos los campos adicionales están marcados como opcionales y todos tienen valores predeterminados. El código de la migración es a continuación:
NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"xxx.sqlite"]];
// migration options
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
...
}
la managedObjectModel se crea correctamente aquí:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"DataModelName" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
He rastreado el problema a una falta de coincidencia en la versión tiene de 1 entidad. El error que se tira incluye esto tiene para la entidad:
MyEntityName = <cc1456b7 b12d0d05 21930308 94ccc078 27a6c345 8847c738 e3a9ae7e 0be9535d>;
pero el hash en el VersionInfo.plist en el paquete de aplicación es:
MyEntityName = <fede6b59 462442d1 8fc98226 b9f8f745 3250dabd ee188248 cb97b1d0 8a74eef3>;
No hay otras entidades en cualquier parte del VersionInfo. plist con el hash <cc1456b7....>
.
Definitivamente edité la versión 2 después de ejecutar la aplicación. ¿Cuál sería la mejor manera de seguir adelante con esto? Definitivamente no quiero lanzar esto en producción y hacer que los usuarios pierdan sus datos porque cometí un error durante el desarrollo. ¿Podría crear una versión 3 con las ediciones finales y estar listo para continuar? –
Si no ha lanzado la versión 2 a los usuarios, entonces no tendrán ningún problema. Estás teniendo problemas porque has guardado con "versión anterior 2" y estás intentando cargarlo con "nueva versión 2". Sin embargo, agregar versiones de modelos innecesarios no duele; solo hace que tu aplicación sea un poco más grande. –
Excelente. Me estaba volviendo un poco loco ya que algunos de nuestros evaluadores internos estaban recibiendo errores, pero probablemente debido al mismo problema que tenía al ejecutar una versión con múltiples cambios. –