J'ai maintenant découvert que c'est assez simple - une fois que vous savez où chercher.
Dans mon AppDelegate, j'ai configuré le NSPersistentStoreCoordinator - et vous devez ajouter quelques options à cela pour lui dire de gérer la migration automatique:
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);
}
Ensuite, vous devez faire un petit truc dans xCode:
- Sélectionnez votre fichier xcdatamodel
- Sélectionnez le menu Conception en haut - puis Modèle de données - puis choisissez Ajouter une version de modèle
- Votre fichier xcdatamodel sera alors déplacé dans un nouveau répertoire avec le même nom que votre fichier xcdatamodel mais avec l'extension xcdatamodeld - il y aura un deuxième fichier dans ce répertoire avec un 2 dans le nom. Sélectionnez le nouveau fichier puis Design-> Data Model-> Set Current Version ( dans Xcode 4, vous faites cela )
- Si vous avez déjà apporté les modifications qui ont rendu votre projet incompatible, supprimez ces modifications du fichier xcdatamodel d'origine. Si vous n'avez pas encore apporté les modifications, modifiez simplement le fichier 2.xcdatamodel (celui que vous venez de créer dans la version actuelle).
- Désormais, lorsque vous installez cette version sur un appareil doté de l'ancien modèle, il mettra automatiquement à niveau ce modèle vers le nouveau modèle.
Cela semble génial et aussi simple que je le voulais - mais je pense que vous devez être prudent pendant le développement lorsque vous modifiez un modèle - sinon vous devrez créer une nouvelle version pour chaque changement.
Je pense que ce que je vais faire, c'est que je conserverai tous les fichiers modifiés, puis une fois que je serai prêt à déployer ma mise à jour, je supprimerai tous les fichiers intermédiaires et je déploierai simplement avec les modèles les plus anciens et les plus récents.
MISE À JOUR (15/07/2011):
Merci à @ rockstarberlin d' avoir signalé qu'il existe une documentation mise à jour sur Apple:
Xcode 4: Définition de la version actuelle d'un modèle d'objet géré
Mise à jour: 19/08/2013 meilleur lien:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html