2012-02-13 7 views
1

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

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

ответ

4

два разумных варианта: обычный версионирование mechansim

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

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

+0

Как я могу использовать первый вариант? Я вижу, содержит ли устройство основной файл sqlite данных, содержащий идентификатор конкретной версии? – Seb

+0

Жаль, что неясно - я очень быстро написал первую версию этого ответа. Я изменил ответ, чтобы попытаться объяснить более четко. Надеюсь, поможет. – Caleb

+0

Спасибо за ответ. Теперь это яснее для меня и имеет больше смысла. – Seb

0

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

Смежные вопросы