Развертывание базы данных sqlite при обновлении приложения iPhone

StackOverflow https://stackoverflow.com/questions/554009

Вопрос

Я использую 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», если вы на самом деле это делаете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top