Теперь я обнаружил, что это довольно просто - если вы знаете, где искать.
В моем AppDelegate я настроил NSPersistentStoreCoordinator - и вам нужно добавить к нему несколько параметров, чтобы он обрабатывал автоматическую миграцию:
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);
}
Тогда вам нужно проделать небольшой трюк в xCode:
- Выберите свой файл xcdatamodel
- Выберите меню «Дизайн» вверху, затем «Модель данных», затем выберите «Добавить версию модели».
- Затем ваш файл xcdatamodel будет перемещен в новый каталог с тем же именем, что и ваш файл xcdatamodel, но с расширением xcdatamodeld - в этом каталоге будет второй файл с цифрой 2 в имени. Выберите новый файл, а затем Design-> Data Model-> Set Current Version ( в Xcode 4 вы делаете это )
- Если вы уже внесли изменения, из-за которых ваш проект стал несовместимым, удалите эти изменения из исходного файла xcdatamodel. Если вам еще предстоит внести изменения - просто отредактируйте файл 2.xcdatamodel (тот, который вы только что внесли в текущую версию).
- Теперь, когда вы устанавливаете эту версию на устройство, имеющее старую модель, она автоматически обновляет эту модель до новой модели.
Это кажется великолепным и таким простым, как я хотел, но я думаю, вам нужно быть осторожным во время разработки, когда вы меняете модель - иначе вам придется создавать новую версию для каждого изменения.
Я думаю, что я сохраню все измененные файлы, а затем, как только я буду готов развернуть свое обновление, я удалю все промежуточные файлы и просто разверну с использованием самых старых и последних моделей.
ОБНОВЛЕНИЕ (15.07.2011):
Спасибо @ rockstarberlin за указание на обновленную документацию Apple:
Xcode 4: установка текущей версии управляемой объектной модели
Обновление: 19.08.2013 лучшая ссылка:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html