Вопрос проверяет понимание необходимости и процесса изменения структуры базы данных после ее создания.
Миграция модели данных — это процесс обновления схемы базы данных (например, в Core Data или Realm) при изменении структуры данных в новой версии приложения. Она нужна, когда вы добавляете, удаляете или изменяете сущности или их атрибуты. Без миграции новая версия приложения, пытаясь открыть базу данных со старой схемой, приведет к краху.
Когда вы меняете модель данных (например, добавляете новое свойство email к сущности User), структура базы данных на диске перестает соответствовать ожиданиям кода.
Почему миграция необходима:
Приложение пытается загрузить данные, используя новую модель. Если оно находит базу, созданную по старой модели, возникает конфликт, и Core Data/Realm выбрасывает исключение.
Типы миграций в Core Data:
Легкая миграция (Lightweight Migration):
Когда: При простых изменениях (добавление/удаление/переименование атрибута или сущности).
Как: Core Data может выполнить ее автоматически. Нужно лишь установить опции при создании NSPersistentContainer.
let container = NSPersistentContainer(name: "Model")
let description = container.persistentStoreDescriptions.first
// Включаем автоматическую миграцию
description?.shouldMigrateStoreAutomatically = true
description?.shouldInferMappingModelAutomatically = trueРучная миграция (Manual Migration):
Когда: При сложных изменениях (например, разбиение одного атрибута на несколько или изменение типа данных, которое нельзя преобразовать автоматически).
Как: Требуется создание NSMappingModel, который описывает, как преобразовать данные из старой схемы в новую. Это сложный процесс.