Развертывание базы данных sqlite при обновлении приложения iPhone
Вопрос
Я использую sqlite в качестве источника данных в приложении для iPhone.У меня есть два вопроса относительно обновлений приложений.
1.) Все данные являются конфигурационными/нетранзакционными.Это означает, что он доступен только для чтения.Когда я обновлю/добавлю данные конфигурации, я выпущу обновление для приложения.Когда пользователь получает обновленное приложение для iPhone, удаляется ли оригинал?Если это так, то все в порядке, потому что будут развернуты новые данные конфигурации базы данных.Если это не так, как мне заменить данные?
2.) Данные являются конфигурационными и транзакционными.Это означает, что пользователь может сохранять данные в базу данных.Когда пользователь переходит на новую версию приложения, я хочу сохранить существующие данные, но заменить все данные конфигурации.Я предполагаю, что для этого мне понадобятся сценарии INSERT и UPDATE, хранящиеся в приложении.Каков эффективный способ сделать это?
Решение
cdespinosa хорошо описала сценарий №1, поэтому я займусь №2.
Я еще не делал этого на iPhone, но в среде настольного компьютера самый простой способ справиться с этим — сохранить данные конфигурации в отдельной базе данных.Вы можете легко подключиться к нескольким базам данных.Начните с открытия основной базы данных, которая, вероятно, должна быть базой данных, которая может меняться.Затем sqlite3_exec
а ATTACH
заявление, которое выглядит следующим образом:
ATTACH 'filepath' AS config;
С этого момента вы можете сделать что-то вроде этого:
SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;
Насколько я понимаю, если вы запишите в базу данных конфигурации, приложение не пройдет проверку подписи и не запустится, а версия SQLite, включенная в iPhone, достаточно старая, чтобы не поддерживать флаг только для чтения.По этой причине вам следует скопировать файл базы данных конфигурации в песочницу и открыть эту копию вместо копии в вашем пакете.
(Разумеется, вы можете использовать SQL и копировать значения из одной базы данных в другую.Но если вы уже копируете всю базу данных конфигурации в свою песочницу...и ты должен быть...тогда это просто дополнительный шаг.Просто прикрепите.)
Я надеюсь, что кто-то другой сможет предоставить вам более подробную информацию.:)
Другие советы
Когда пользователь обновляет приложение, старый пакет приложений удаляется и устанавливается новый пакет приложений, но пользовательские данные, связанные с пакетом приложений, остаются нетронутыми.
Таким образом, вы можете выбрать: а) оставить свои данные в пакете приложения (они будут заменены автоматически) или б) в одностороннем порядке скопировать их в область пользовательских данных при первом запуске (чтобы вы намеренно заменили их при обновлении).
Я оставлю №2 человеку, знающему sqlite, но вы можете использовать тег «sqlite» вместо тега «mysql», если вы на самом деле это делаете.