Основные данные Отсутствует версия модели? - PullRequest
0 голосов
/ 15 мая 2018

У меня фактически есть проект с 6 базовыми моделями данных, такими как V1-V6, все они находятся в магазинах приложений, когда я пытаюсь обновить приложение с одной из более старых версий (базовая модель данных V3) до текущей версии, в которой происходит сбой (схема несоответствие)

при исследовании фактически версия модели V3 отличается между двумя версиями проекта от более старой модели V3 до текущей модели V3.

как и в версии V3, я добавил новую сущность и не выполнял миграцию LightWeight (забыл это сделать), теперь я могу позволить пользователям обновить эту старую версию приложения с моделью V3 до текущей версии приложения, например, путем решения this (отсутствует проблема миграции)

Пожалуйста, предложите любой способ добавить отсутствующую модель миграции, если это возможно, чтобы обеспечить кузнечное обновление старой версии приложения до текущей версии приложения.

1 Ответ

0 голосов
/ 15 мая 2018

addPersistentStore автоматически выполнит необходимую облегченную миграцию.Проверьте, доступен ли этот код во всех начальных путях вашего приложения.

Для этого вам необходимо предоставить правильный набор параметров, как показано ниже:

do {
    let options = [ NSInferMappingModelAutomaticallyOption : true,
                    NSMigratePersistentStoresAutomaticallyOption : true]

    try persistentStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType,
                                                      configurationName: nil,
                                                      at: persistentStoreURL,
                                                      options: options)
} catch {
    fatalError("Problem loading Persistent Store")
}

Пожалуйста, также убедитесь, что вашОсновной файл xcdatamodel указывает на последнюю версию вашей модели данных. Также обратите внимание , что после выбора вашей последней версии файла xcdatamodel (yourdatamodel 2.xcdatamodel), а не корневого файла xcdatamodel (yourdatamodel.xcdatamodel), будет сделан следующий снимок.

enter image description here

Слово предостережения:

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

Вы можете избавиться от лишнего веса, добавив больше полей и прекратив использовать старые поля в своем коде, упрощая задачу для Core Data.Для строк, использующих более старые поля, просто запустите некоторую операцию вставки / обновления / удаления , если обнаружено изменение версии модели данных ядра .

Чтобы проверить, где происходит сбой облегченного типа, вы можете включить следующиеАргумент XCode:

-com.apple.CoreData.MigrationDebug 1

Если облегченная версия не способна полностью перенести вашу модель (например, вы переименовали свои сущности или изменились типы данных, что очень нереально, и вам действительно следует пересмотреть свой дизайн, есливы делаете это), то вы можете рассмотреть это несколько сложное решение:

  • добавить постоянное хранилище со старой версией модели и создать резервную копию существующих строк в каком-то внешнем файле (неосновные данные)
  • удалить старое постоянное хранилище и воссоздать его с помощью addPersistentStore + более новая версия модели
  • использовать более новое постоянное хранилище для вставки резервных копий данных

Если все остальное не удается, рассмотрите вариант сопоставления модели.Обратитесь к этой статье для более подробной информации .

...