Основные данные Отсутствует версия модели?
На самом деле у меня есть проект с 6 основными моделями данных, такими как V1-V6, все они сейчас находятся в магазинах приложений, когда я пытаюсь обновить приложение с одной из более старых версий (базовая модель данных V3) до текущей версии, в которой происходит сбой (несоответствие схемы)
при исследовании фактически версия модели V3 отличается между двумя версиями проекта от более старой модели V3 до текущей модели V3.
как и в версии V3, я добавил новую сущность и не выполнял миграцию LightWeight (забыл это сделать), теперь я могу позволить пользователям обновить эту более старую версию приложения с моделью V3 до текущей версии приложения, например, путем решения этой проблемы (отсутствует) вопрос миграции)
Пожалуйста, предложите любой способ добавить отсутствующую модель миграции, если это возможно, чтобы обеспечить кузнечное обновление старой версии приложения до текущей версии приложения.
1 ответ
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).
Слово предостережения:
Пересмотрите: вам действительно нужно что-то сверх легкого веса? В большинстве случаев легкий вес должен решить ваши проблемы.
Вы можете избавиться от лишнего веса, добавив больше полей и прекратив использовать старые поля в своем коде, тем самым упрощая задачу для Core Data. Для строк, использующих более старые поля, просто запустите некоторую операцию вставки / обновления / удаления, если обнаружено изменение версии базовой модели данных.
Чтобы проверить, где происходит сбой облегченного режима, вы можете включить следующий аргумент XCode:
-com.apple.CoreData.MigrationDebug 1
Если облегченная версия не способна полностью перенести вашу модель (например, вы переименовали свои сущности или изменились типы данных, что очень нереально, и вы должны действительно пересмотреть свой дизайн, если вы делаете это), тогда вы можете рассмотреть это несколько комплексное решение:
- добавить постоянное хранилище со старой версией модели и создать резервную копию существующих строк в каком-то внешнем файле (неосновные данные)
- удаление старого постоянного хранилища и воссоздание его с использованием addPersistentStore + более новая версия модели
- использовать более новое постоянное хранилище для вставки резервных копий данных
Если все остальное терпит неудачу, тогда рассмотрите альтернативную модель отображения. Обратитесь к этой статье для более подробной информации.