Хотя теоретически вы можете переносить данные вручную, это, вероятно, не стоит затраченных усилий.Вы хотите использовать automatic lightweight migration
.
Чтобы выполнить автоматическую облегченную миграцию, вам нужно настроить две модели данных, а затем в коде вы скажете Core Data выполнить миграцию.Это означает, что вы не должны изменять свою модель данных до тех пор, пока вы не закончите чтение .Если у вас есть, (автоматически или вручную) восстановить старую модель.Он понадобится вам для миграции.Вот как работает автоматическая облегченная миграция:
Сначала необходимо добавить версию модели в модель данных.Выберите существующую модель, а затем добавьте версию из меню Editor
:


Вам будет предложено указать модель данных ивыберите существующую модель, на которой она будет основана.

Теперь продолжайте и внесите изменения в новую модель. Когда вы закончите, вам нужносообщить Core Data использовать эту новую модель в качестве текущей версии.Мы еще не дошли до кода, так что эта часть проста.(Код тоже прост.) На правой боковой панели выберите активную модель, как показано здесь:

Убедитесь, что ваша модель выбрана в левой рукенавигатор, иначе вы можете не увидеть опции справа.Вы должны получить что-то вроде этого:

(я на самом деле использую здесь версию 2 вместо версии 3, но идея та же.)
Теперь вам нужно быстро изменить код, чтобы Core Data знала, как выполнить миграцию за вас.
Внутри вашего persistentStoreCoordinator
метода в делегате приложения измените эту строку:
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]){
к следующему (добавление в строке, предшествующей оператору if
):
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]){
Вы фактически передали Core Data словарь опций, который говорит ему о необходимости переноса данныхмагазин для вас.(Внимательно посмотрите на предыдущий код, он будет иметь смысл после нескольких прочтений.)
Редактировать: Вы, вероятно, можете делать то, что хотите.Если я вас правильно понимаю, вы должны создать новую версию модели, выполнить упрощенную миграцию, и они вручную внесут необходимые изменения.Мой ответ выше остается в силе, за исключением того, что вы захотите потом внести некоторые изменения вручную.