iOS избегать использования старой модели данных ядра - PullRequest
1 голос
/ 13 февраля 2012

У меня есть проект, в котором используются основные данные, и я выполнял миграцию всякий раз, когда мне нужно было внести небольшое изменение в мою модель.Однако на прошлой неделе мне пришлось полностью пересмотреть мою модель и то, как она реагирует, что я не могу перенести какие-либо данные.

При этом мне стало интересно, есть ли способ проверить, какая версия модели у меня в устройстве и, возможно, с помощью кода удалить ее и полностью создать новую с нуля.Возможно, это не самый предпочтительный способ, но если у кого-то есть лучшие решения, чем я, открыт для предложений.

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012

Два разумных варианта:

  • Используйте обычный механизм управления версиями NSManagedObjectModel. Увеличьте версию вашей новой модели. Core Data автоматически проверит, совместим ли данный магазин с одной из моделей в приложении, прежде чем открыть магазин; если нет, то при попытке его добавления вы получите ошибку. Поэтому, если вы не предоставите старую модель в своем приложении, Core Data не будет использовать старые хранилища. Вы можете ответить на ошибку, удалив магазин. Вы также можете проверить магазин, прежде чем добавить его, используя -isConfiguration:compatibleWithStoreMetadata:. Подробнее см. Инициирование процесса миграции .

  • Используйте другое имя для любых магазинов, которые вы создаете с помощью новой модели. Нередко приложение для iOS использует один или два магазина с определенными именами. Возможно, вы знаете имя, которое использовали для магазина в предыдущих версиях вашего приложения; переключение на другое имя позволяет легко узнать, совместим ли магазин со старой или новой моделью.

0 голосов
/ 13 февраля 2012

Если вы изменили свойства так, чтобы некоторые из старых свойств не существовали в новой модели, попробуйте использовать метод responsedsToSelctor:, чтобы проверить, отвечает ли объект на старый селектор. Если это так, у вас есть старая модель.

...