Ora ho scoperto che questo è abbastanza semplice - una volta che si sa dove guardare.
Nel mio AppDelegate I set-up della NSPersistentStoreCoordinator - ed è necessario aggiungere alcune opzioni a questo per dire che per gestire l'auto-migrazione:
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);
}
allora avete bisogno di fare un piccolo trucco in Xcode:
- selezionare il file xcdatamodel
- Selezionare il Menu design in alto - allora Data Model - quindi scegliere Aggiungi Modello Versione
- tuo xcda il file tamodel verrà quindi spostato in una nuova directory con lo stesso nome del 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 quindi Progetta-> Modello dati-> Imposta la versione corrente (in Xcode 4 you do this)
- Se hai già apportato le modifiche che hanno causato la incompatibilità del tuo progetto, prendi queste modifiche fuori dal file originale xcdatamodel. Se non hai ancora apportato le modifiche, modifica il file 2.xcdatamodel (quello che hai appena creato).
- Ora quando si installa questa versione su un dispositivo che ha il vecchio modello, aggiornerà automaticamente tale modello sul nuovo modello.
Questo sembra grande e semplice come avrei voluto - ma penso che è necessario fare attenzione durante lo sviluppo come si cambia un modello - altrimenti si dovrà creare una nuova versione per ogni modifica.
Penso che quello che farò è che manterrà tutti i file modificati e poi, una volta pronto a distribuire il mio aggiornamento, eliminerò tutti i file intermedi e mi limiterò a distribuire con i modelli più vecchi e recenti.
AGGIORNAMENTO (15/07/2011):
Grazie a @rockstarberlin per sottolineare la documentazione sono stati pubblicati aggiornamenti di Apple:
Xcode 4: Setting a Managed Object Model’s Current Version
Aggiornamento: 8/19/2013 link migliore:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html
Suggerirei di leggere la migrazione dei dati di base e la guida al controllo delle versioni e, disponibile nel visualizzatore doc Xcode e su developer.apple.com. – Hunter
Non ho trovato la risposta in esso esposta semplicemente - ci è voluto un po 'per scoprire come farlo. – Grouchal
NSInferMappingModelAutomaticallyOption funziona bene, ma solo per mappature semplici, come la modifica del nome di un attributo. Per qualcosa di più complicato (relazioni, rimozione o aggiunta di entità) sarà necessario aggiungere un modello di mappatura. Se Xcode si lamenta che NSInferMappingModelAutomaticallyOption non è dichiarato, aggiungi #import al file di intestazione del delegato dell'app. –