2013-08-26 5 views
0

У меня есть функциональное приложение, которое в значительной степени ориентировано на базу данных. Мой клиент в настоящее время использует это приложение, и у него много ранее сохраненных данных (примечание: оно локально, а не сохраняется в онлайн-базе данных). Проблема в том, что я знаю, когда я обновляю свою модель данных, мне придется удалить ее, а затем переустановить приложение, потому что в противном случае она потерпит крах из-за несоответствий в модели данных. Есть ли способ сохранить данные там, все еще обновляя мою модель данных?Сохранить основные данные?

+1

http://mobile.tutsplus.com/tutorials/iphone/core-data_schema-versioning-and-lightweight-migrations/ –

ответ

3

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

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

NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES, 
    NSInferMappingModelAutomaticallyOption:@YES}; 


if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
    .... 
} 

Это работает, если ваши изменения включают в себя только один или несколько из следующих действий:

  • Добавление или удаление атрибута
  • Изменение атрибута «Необязательный» флаг (при условии, что если вы делаете его не факультативным, вы предоставляете значение по умолчанию)
  • Переименование объекта или его атрибута
  • Добавление, удаление или переименование лица
  • Добавление родительских или дочерних объектов, или движущиеся атрибуты к другой точке в иерархии
  • Изменение отношения от к-одному к ко-многим

Если вы» переименовать все, вам нужно установить идентификатор переименования, чтобы Core Data знал, как переносить.

Если этого недостаточно, Core Data поддерживает неавтоматическую миграцию несколькими способами. Это подробно описано в документации Apple, которую я не буду пытаться воспроизвести здесь.

+0

Именно это я и искал. Я не знал, что смогу мигрировать автоматически. Благодарю. –

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