Es una opción perfectamente válida si su aplicación requiere acceso a Internet de todos modos. De lo contrario, los usuarios pueden quedar con un conjunto de datos vacío (elimina la base de datos anterior cuando considera que es incompatible con el modelo actual, pero no puede volver a llenarla sin tener acceso al servidor).
Técnicamente, eso es algo trivial. Al configurar la NSPersistentStoreCoordinator
:
NSURL *storeURL = ...;
NSManagedObjectModel *managedObjectModel = ...;
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel];
// Check if we already have a persistent store
if ([[NSFileManager defaultManager] fileExistsAtPath: [storeURL path]]) {
NSDictionary *existingPersistentStoreMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType URL: storeURL error: &error];
if (!existingPersistentStoreMetadata) {
// Something *really* bad has happened to the persistent store
[NSException raise: NSInternalInconsistencyException format: @"Failed to read metadata for persistent store %@: %@", storeURL, error];
}
if (![managedObjectModel isConfiguration: nil compatibleWithStoreMetadata: existingPersistentStoreMetadata]) {
if (![[NSFileManager defaultManager] removeItemAtURL: storeURL error: &error])
NSLog(@"*** Could not delete persistent store, %@", error);
} // else the existing persistent store is compatible with the current model - nice!
} // else no database file yet
[_persistentStoreCoordinator addPersistentStoreWithType: NSSQLiteStoreType
configuration: nil
URL: storeURL
options: nil
error: &error];
estoy recibiendo este código de error SQLite de error: 11 , 'la imagen del disco de la base de datos está mal formada' en el lanzamiento inicial después de la actualización. Pero en los lanzamientos posteriores, no es un problema ya que los archivos sqlite se eliminan. Pero parece que no puedo evitar este accidente de una sola aplicación. Y sentir que la aplicación falla inmediatamente después de la actualización es algo decepcionante. algunas ideas ?? – raw3d