Обновить базу данных на iPhone - PullRequest
2 голосов
/ 29 ноября 2009

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

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

Предложения

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

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

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

Я включил таблицу 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 МБ) наших данных в базе данных только для чтения и меньшая база данных чтения и записи для пользовательского и кэшированного контента.

0 голосов
/ 29 ноября 2009

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

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

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

NSString *docDir = [arrayPaths objectAtIndex:0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...