Что я должен сделать, чтобы заставить Базовые Данные автоматически перемещать модели?

Похоже, что обработчики необходимо добавить в system.webserver, согласно этому блогу: http://geekswithblogs.net/lorint/archive/2007/03/28/110161.aspx

Спасибо за помощь @ Уве Кейм

95
задан shim 18 April 2019 в 02:23
поделиться

3 ответа

Теперь я обнаружил, что это довольно просто - если вы знаете, где искать.

В моем 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:

  1. Выберите файл xcdatamodel
  2. Выберите меню дизайна вверху - затем Модель данных - затем выберите Добавить модель Версия
  3. Ваш файл xcdatamodel будет перемещен в новый каталог с тем же именем, что и ваш файл xcdatamodel, но с расширением xcdatamodeld - в этом каталоге будет второй файл с цифрой 2 в имени. Выберите новый файл и затем Design-> Data Model-> Установите текущую версию ( в Xcode 4 вы делаете это )
  4. Если вы уже внесли изменения, из-за которых ваш проект стал несовместимым - удалите эти изменения из исходного файла xcdatamodel. Если вам еще предстоит внести изменения - просто отредактируйте файл 2.xcdatamodel (тот, который вы только что сделали текущей версией).
  5. Теперь, когда вы устанавливаете эту версию на устройство, имеющее старую модель, она автоматически обновляется. модель к новой модели.

Это кажется великолепным и таким простым, как я хотел, но я думаю, что вам нужно быть осторожным во время разработки, когда вы меняете модель - иначе вам придется создавать новую версию для каждого изменения.

Я думаю, что я сохраню все измененные файлы, а затем, когда я буду готов развернуть свое обновление, я ' Я удалю все промежуточные файлы и просто разверну с использованием самых старых и последних моделей.


ОБНОВЛЕНИЕ (15.07.2011):

Спасибо @ rockstarberlin за указание на наличие обновленной документации в apple:

Xcode 4: Установка текущей версии модели управляемых объектов

Обновление: 19.08.2013, лучшая ссылка:

https://developer.apple.com/library/content/documentation/Cocoa/ Conceptual / CoreDataVersioning / Articles / vmModelFormat.html

138
ответ дан 24 November 2019 в 05:51
поделиться

Это было невероятно полезно. Документация Apple, как обычно, была ужасно неполной. Я рекомендую выполнить чистую сборку, так как при первом запуске после внесения этих изменений я столкнулся с ошибкой «Не удается объединить модели с двумя разными объектами xxx». В чистой сборке это исправлено.

13
ответ дан 24 November 2019 в 05:51
поделиться

Ответ Граучала идеален ... но если у вас все еще есть сообщение «Невозможно объединить модели с двумя разными объектами xxx» даже после очистки сборки несколько раз ... Возможно, вы проблемы с тем, как загружается managedObjectModel ... взгляните на этот ... который помог мне исправить ...

основные проблемы миграции данных

6
ответ дан 24 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: