2009-02-16 1 views
9

Я использую sqlite как источник данных в приложении для iPhone. У меня есть два вопроса относительно апгрейдов приложений.Развертывание sqlite DB для обновления приложения iPhone

1.) Данные - все config/nontransactional. Смысл, это только чтение. Когда я обновляю/добавляю данные конфигурации, я выведу обновление для приложения. Когда пользователь получает обновленное приложение для iPhone, оригинал удаляется? Если это так, я в порядке, потому что новые данные конфигурации db будут развернуты. Если это не так, как мне заменить данные?

2.) Данные являются конфигурационными и транзакционными. Это означает, что пользователь может сохранять данные в db. Когда пользователь обновляется до новой версии приложения, я хочу сохранить их существующие данные, но заменить все данные конфигурации. Я предполагаю, что мне нужно иметь скрипты INSERT и UPDATE, хранящиеся в приложении, чтобы выполнить это. Каков эффективный способ сделать это?

+0

Вы утверждаете, что устанавливаете MySQL на iPhone? Я серьезно сомневаюсь, что это может сработать. Или вы говорите, что iPhone запрашивает базу данных MySQL на сервере где-то? –

+0

Да - mysql находится на iPhone, что является распространенным сценарием. Чтобы быть явным, вопрос для разработчиков iPhone. – 4thSpace

+0

SQLite - распространенный сценарий на iPhone (он встроен). Использование MySQL - это орехи. –

ответ

11

cdespinosa описал сценарий # 1, поэтому я займусь # 2.

Я еще не сделал этого на iPhone, но в среде рабочего стола самый простой способ справиться с этим - сохранить данные конфигурации в отдельной базе данных. Вы можете легко подключиться к нескольким базам данных. Начните с открытия основной базы данных, которая, вероятно, должна быть базой данных, которая может измениться. Тогда sqlite3_execATTACH заявление, которое выглядит следующим образом:

ATTACH 'filepath' AS config; 

С тех пор, вы можете сделать что-то вроде этого:

SELECT * FROM UserTableName; 
SELECT * FROM config.ConfigurationTableName; 

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

(Вы можете, конечно, использовать SQL и копировать значения из одной базы данных в другую. Но если вы уже копируете всю базу данных конфигурации в вашу песочницу ... и вы должны быть ... тогда это просто Дополнительный шаг. Просто прикрепите.)

Я надеюсь, что кто-то еще может предоставить вам более подробную информацию. :)

5

Когда пользователь обновляет приложение, старый пакет приложений удаляется, а новый пакет приложений устанавливается, но пользовательские данные, связанные с пакетом приложений, не повреждены.

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

Я оставлю # 2 знакомому пользователю sqlite, но вы можете использовать тег «sqlite» вместо тега «mysql», если это то, что вы на самом деле делаете.

+0

Yep - обновленный тег. Я не думаю, что выбор работает, так как пользователь также накапливает данные к тому моменту, когда он готов к обновлению. Если я выберу выбор b, где db скопирован, если не пакет?Кроме того, я не могу «заменить» пользовательские данные. Только конфигурационные (не пользовательские) данные. Благодарю. – 4thSpace