Teraz odkryłem, że jest to dość proste - kiedy już wiesz, gdzie szukać.
W moim AppDelegate konfiguruję NSPersistentStoreCoordinator - i musisz dodać do tego kilka opcji, aby nakazać mu obsługę automatycznej migracji:
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);
}
Następnie musisz zrobić małą sztuczkę w xCode:
- Wybierz plik xcdatamodel
- Wybierz menu Projekt u góry - następnie Model danych - a następnie wybierz Dodaj wersję modelu
- Twój plik xcdatamodel zostanie następnie przeniesiony do nowego katalogu o takiej samej nazwie jak plik xcdatamodel, ale z rozszerzeniem xcdatamodeld - w tym katalogu będzie drugi plik z 2 w nazwie. Wybierz nowy plik, a następnie Projekt-> Model danych-> Ustaw bieżącą wersję ( w Xcode 4 robisz to )
- Jeśli wprowadziłeś już zmiany, które spowodowały niezgodność projektu - usuń te zmiany z oryginalnego pliku xcdatamodel. Jeśli jeszcze nie wprowadziłeś zmian - po prostu edytuj plik 2.xcdatamodel (ten, który właśnie wprowadziłeś w bieżącej wersji).
- Teraz, gdy zainstalujesz tę wersję na urządzeniu, które ma stary model - automatycznie zaktualizuje ten model do nowego modelu.
Wydaje się to świetne i tak proste, jak chciałem - ale myślę, że podczas programowania przy zmianie modelu trzeba zachować ostrożność - w przeciwnym razie będziesz musiał stworzyć nową wersję dla każdej zmiany.
Myślę, że zachowam wszystkie zmienione pliki, a gdy będę gotowy do wdrożenia aktualizacji, usunę wszystkie pliki pośrednie i po prostu wdrożę z najstarszymi i najnowszymi modelami.
AKTUALIZACJA (15/07/2011):
Podziękowania dla @ rockstarberlin za wskazanie, że w Apple jest zaktualizowana dokumentacja:
Xcode 4: Ustawianie bieżącej wersji zarządzanego modelu obiektów
Aktualizacja: 19.08.2013 lepszy link:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html