Есть хорошие примеры того, как выполнить миграцию вручную, но основные шаги:
- создать модель отображения
- включить эту модель картирования в ваш проект
- отключить автоматическую миграцию
Однако, что такое сбой? Вас убивает ОС за то, что вы слишком долго? Как ручная миграция не вылечит это.
Какой тип бэк-магазина вы используете? Если вы используете двоичный файл, возможно, что объем памяти израсходуется, поскольку при миграции в памяти будет две копии всей базы .
обновление от комментария OP
Я думаю, что я видел, что это также происходит с SQLite, так что, возможно, есть что-то большее, чем память, хотя это верный момент. Да, ОС убивает его за то, что он занимает слишком много времени, особенно на устройствах 1G. Я подумал, что ручная миграция - это также способ перейти от «миграции при запуске приложения с ограничениями по времени» к чему-то без ограничений по времени, и сделать это, возможно, в фоновом потоке или тому подобное.
Нет способа выполнить миграцию в фоновом потоке, потому что вы меняете источник данных. Если ваша миграция занимает слишком много времени при запуске, то рекомендуемое решение:
- Позвольте циклу
-applicationDidFinishLaunching:
завершить цикл выполнения, не затрагивая основные данные. Это остановит этот сбой
- Начните миграцию на следующей итерации в цикле выполнения (вероятно, хотите представить пользователю какой-то индикатор прогресса) и завершите миграцию.
Если вы используете бинарное хранилище, у вас, вероятно, все еще будут проблемы с памятью, но это решит ваш сбой при запуске. Крах ОС - это сообщение «Я думаю, что вы заблокированы». Позволяя завершить -applicationDidFinishLaunching:
, вы сообщаете ОС, что вы не заблокированы.