Как я могу обновить только несколько таблиц, используя предварительно заполненную базу данных Core Data через обновление App Store - PullRequest
1 голос
/ 28 февраля 2012

У нас есть приложение в магазине приложений, которое использует предварительно заполненную базу данных Core Data.Мы хотим обновить все таблицы в базе данных, кроме 1 таблицы, которая является таблицей избранного, где пользователи хранят свои избранные автобусные маршруты или остановки.В настоящее время мы выполняем это обновление, когда делегат приложения использует API-интерфейс SQLite C и NSFileManager для выполнения следующих действий:

  1. Создание временной базы данных избранного
  2. Копирование избранного из базы данныхна диске во временную базу данных
  3. Удалить базу данных на диске ([fileManager removeItemAtPath: storePath error: NULL])
  4. Скопировать новую базу данных из комплекта приложения на диск ([fileManager copyItemAtPath:databaseBundlePath toPath: storePath error: © Error])
  5. Копировать избранное из базы данных Temp в новую базу данных.
  6. Удалить временную базу данных избранного.

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

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

1 Ответ

1 голос
/ 28 февраля 2012

Почему бы вам не оставить базу данных такой, какая она есть, и просто вставить / удалить данные по мере необходимости вместо того, чтобы копировать предварительно заполненную базу данных?

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

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

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

...