Простая миграция основных данных на ранних этапах разработки, когда потеря данных ожидается и приемлема
Когда приложение Core Data находится на ранней стадии разработки, его модель управляемых объектов часто находится в постоянном движении. Для каждой сборки новые управляемые объекты и свойства добавляются или удаляются из модели.
При изменении модели управляемых объектов приложение завершит работу при следующем запуске с ошибкой:
Модель, используемая для открытия магазина, несовместима с моделью, используемой для создания магазина.
Общий совет в этой ситуации - удалить приложение с вашего устройства / симулятора и перезапустить.
Это отлично работает для разработчиков, использующих Xcode, но раздражает нетехнических заинтересованных сторон, вовлеченных в процесс выпуска. Было бы гораздо предпочтительнее не объяснять руководителю или команде QA, что они должны удалить приложение перед установкой этого обновления из TestFlight. Или к полевым ошибкам, вызванным этой проблемой.
Как только модели будут доработаны, мы реализуем настоящую стратегию миграции Core Data.
На этом этапе разработки потеря данных является приемлемой и ожидаемой.
Этот метод будет удален до выпуска приложения.
Какой самый простой, легкий, съемный и отладочный способ "перенести" изменения в модель управляемых объектов между выпусками? Скорее всего, это будет эквивалентно "удалить приложение и перезапустить", но без необходимости вручную удалять приложение.
Это должно обрабатывать все изменения в стеке основных данных, включая добавление и удаление управляемых объектов и свойств.
2 ответа
В этом сценарии я проверил бы совместимость с текущей моделью, а затем удалил бы базу данных SQLite, если бы потребовалась миграция.
Рассмотрите возможность использования (в Objective-C)
// error, sourceStoreURL, theManagedObjectModel are valid
NSDictionary *storeMetadata=[NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType
URL: sourceStoreURL error: &error];
BOOL storeIsCurrent=[theManagedObjectModel isConfiguration: nil
compatibleWithStoreMetadata: storeMetadata];
if (!storeIsCurrent)
{
// Alert user
// Delete on-disk store via sourceStoreURL
// (including -wal and -shm files if journaling enabled)
}
Вы можете изменить URL магазина при смене модели.
Вы также можете создавать версии моделей даже для ранней разработки, а затем удалять их все перед отправкой. Это также может помочь вашей команде изучить все тонкости управления версиями модели.