iOS - Создать схему базы данных (запускать код только один раз) - PullRequest
0 голосов
/ 24 марта 2012

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

Как запустить код OBJC, когда пользователь устанавливает или обновляетприложение?

С уважением

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

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

Это будет охватывать ваш простой сценарий «запускайте код один раз после установки» - вы можете добиться того же для обновлений с помощью аналогичного подхода, но используя переменную CFBundleVersion (которая будет отличаться для каждой версии вашего приложения).

1 голос
/ 24 марта 2012

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

Распространенным подходом к решению этой проблемы является использование самодельных метаданных. Когда вы впервые создали базу данных, вы должны создать дополнительную таблицу с именем "metadata" или "properties" с двумя столбцами varchar, "name" и "value". Вы вставляете одну строку, ("database_ver", "1").

В своем классе слоя базы данных (или адаптера) вы создаете метод "open" для обработки открытия. В рамках этого метода вы сначала запускаете select database_ver from metadata;, чтобы проверить версию базы данных. Если ничего не получено, вы запускаете сценарии создания таблицы и вставляете database_ver = 1 строку.

Позже, если вы обновили формат таблицы, предоставьте операторы alter table для каждой версии и запустите их на основе database_ver. Для установок после обновления вы можете использовать обновленные операторы create table, а затем установить "database_ver" на "2" (или выше) напрямую, не пропуская alter table.

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

У FMDB нет проблем с запуском такого механизма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...