Ora ho scoperto che è abbastanza semplice, una volta che sai dove cercare.
Nel mio AppDelegate ho configurato NSPersistentStoreCoordinator - e devi aggiungere alcune opzioni a questo per dirgli di gestire la migrazione automatica:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
NSLog(@"Problem with PersistentStoreCoordinator: %@",error);
}
Quindi devi fare un piccolo trucco in xCode:
- Seleziona il tuo file xcdatamodel
- Seleziona il menu Design in alto, quindi Modello di dati, quindi scegli Aggiungi versione modello
- Il tuo file xcdatamodel verrà quindi spostato in una nuova directory con lo stesso nome del tuo file xcdatamodel ma con l'estensione xcdatamodeld - ci sarà un secondo file in questa directory con un 2 nel nome. Seleziona il nuovo file e poi Design-> Modello di dati-> Imposta versione corrente ( in Xcode 4 lo fai )
- Se hai già apportato le modifiche che hanno reso il tuo progetto incompatibile, rimuovi queste modifiche dal file xcdatamodel originale. Se devi ancora apportare le modifiche, modifica semplicemente il file 2.xcdatamodel (quello che hai appena creato nella versione corrente).
- Ora, quando installi questa versione su un dispositivo che ha il vecchio modello, aggiornerà automaticamente quel modello al nuovo modello.
Sembra fantastico e semplice come volevo, ma penso che sia necessario prestare attenzione durante lo sviluppo mentre si modifica un modello, altrimenti sarà necessario creare una nuova versione per ogni modifica.
Penso che quello che farò è che manterrò tutti i file modificati e poi, una volta pronto per distribuire il mio aggiornamento, cancellerò tutti i file intermedi e distribuirò solo con i modelli più vecchi e più recenti.
AGGIORNAMENTO (15/07/2011):
Grazie a @ rockstarberlin per aver sottolineato che c'è una documentazione aggiornata su Apple:
Xcode 4: impostazione della versione corrente di un modello a oggetti gestito
Aggiornamento: 19/8/2013 collegamento migliore:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html