È una cosa assolutamente valida da fare se l'app richiede comunque l'accesso a Internet. In caso contrario, gli utenti potrebbero essere lasciati con un set di dati vuoto (si elimina il vecchio database quando si trova che è incompatibile con il modello corrente, ma non è possibile ri-popolare senza accesso al server).
Tecnicamente, questa è una cosa banale da fare. Quando si imposta 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];
sto ottenendo questo errore codice di errore SQLite: 11 , "l'immagine del disco del database non è corretta" all'avvio iniziale dopo l'aggiornamento. Ma nei successivi lanci, non è un problema dato che i file sqlite vengono cancellati. Ma sembra non posso evitare questo arresto anomalo delle app in una sola volta. E sentire che l'app si blocca immediatamente dopo l'aggiornamento è un po 'deludente. qualche idea ?? – raw3d