У меня есть приложение с очень большой базой данных Core Data. За прошедший год я много раз проверял это.
В прошлый раз, когда я версировал базу данных, я внес одно простое изменение в сущность: я добавил новый необязательный атрибут. По некоторым причинам он не будет мигрировать с помощью облегченной миграции. Гораздо позже я узнал, что это произошло из-за ошибки в коде облегченной миграции Apple, возникшей из-за «переименования идентификаторов», которые мне понадобились в другой версии.
Во всяком случае, я отвлекся ...
Из-за ошибки, которая не позволяла мне использовать облегченную миграцию, я создал файл сопоставления, чтобы помочь с миграцией, не понимая, что это будет намного более тяжелый процесс и заставит моих пользователей ждать, пока приложение загрузит всю базу данных в память при выполнении миграции. Оказывается, это не совсем вариант с очень большими базами данных, и многие из моих пользователей вообще не смогли перенести базу данных из-за проблем с памятью и т. Д.
Итак, теперь я хочу переиздать свое приложение и решить эту проблему. Проблема в том, что у некоторых из моих пользователей есть база данных, которая как-то помечена как находящаяся «в процессе миграции». Даже с моим новым кодом, который избавляется от файла сопоставления и поддерживает облегченную миграцию, пользователи, находящиеся в этом состоянии «в процессе миграции», похоже, не получают сброс.
Какие есть варианты возврата миграции?
- Я могу определить, что я нахожусь в этом состоянии, потому что в каталоге «Документы» находится файл «.myDB.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3». Удаление этого файла не очищает миграцию. Я предполагаю, что база данных каким-то образом помечена как находящаяся в этом состоянии или уже частично перенесена.
- Я могу обнаружить это состояние, а затем полностью удалить базу данных. Но это заставляет моих пользователей заново скачивать свои данные.
Есть мысли?
Спасибо за помощь.