Вопрос

Я пытаюсь загрузить обновленную версию базы данных sqlite на свое устройство и до сих пор не нашел другого способа сделать это, кроме как каждый раз переименовывать ее (болезненно).Устаревшая (кэшированная?) копия постоянно остается на устройстве.

Я понимаю, как загрузить обновленную версию в симулятор, очистив папку /applications, но на физическое устройство это, похоже, не влияет.

Предложения?

Это было полезно?

Решение

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

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

Я включаю таблицу Schema_version в свою базу данных:

create table schema_version (
  version integer not null
);

а затем при запуске приложения я проверяю текущую версию, а затем ищу в каталоге своего приложения файл update-schema-[N+1].sql, который можно применить в качестве обновления.Итак, если моя версия схемы равна 4, я проверю наличие update-schema-5.sql и т. д.(и я повторяю это по мере необходимости, пока у меня не закончатся файлы update-schema-N.sql для применения.)

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

Мое приложение использует гибридный подход, при котором большая часть (60 МБ) наших данных хранится в базе данных только для чтения, а меньшая база данных для чтения и записи — для пользовательского и кэшированного контента.

Другие советы

Вы можете написать приложение командной строки OS X, чтобы «разграничить» старую и новую базу данных.Затем отправьте устройству объект JSON (или XML) со всеми добавлениями, удалениями и обновлениями и примените их к существующему хранилищу.

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

NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory,
            NSUserDomainMask,
            YES);

NSString *docDir = [arrayPaths objectAtIndex:0];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top