Pergunta

Eu estou usando SQLite como uma fonte de dados em um aplicativo para iPhone. Eu tenho duas perguntas sobre atualizações de aplicativos.

1.) Os dados são todos config / não transacional. Ou seja, ele é somente leitura. Quando eu atualizar / adicionar dados de configuração, vou emitir uma atualização para o aplicativo. Quando um usuário recebe um aplicativo para iPhone atualizado, se o original se desinstalado? Se for esse o caso, eu estou bem, porque os novos dados db configuração será implantado. Se isso não for o caso, como faço para substituir os dados?

2.) Os dados são config e transacional. Ou seja, o usuário pode salvar os dados no db. Quando as atualizações do usuário para uma nova versão do aplicativo, eu quero manter seus dados existentes, mas substituir todos os dados de configuração. Eu estou supondo que eu precisaria ter INSERT e UPDATE de scripts armazenados dentro do aplicativo para fazer isso. O que é uma maneira eficiente de fazê-lo?

Foi útil?

Solução

cdespinosa descreveu o cenário # 1 bem, então eu vou enfrentar # 2.

Eu não tenho feito isso no iPhone ainda, mas em um ambiente de desktop a maneira mais fácil de lidar com isso é para manter seus dados de configuração em um banco de dados separado. Você pode anexar a vários bancos de dados com bastante facilidade. Comece por abrir seu banco de dados principal, que provavelmente deve ser a base de dados que pode mudar. Então sqlite3_exec uma declaração ATTACH, que tem esta aparência:

ATTACH 'filepath' AS config;

A partir daí, você pode fazer algo como isto:

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

É meu entendimento que se você escrever para o banco de dados de configuração do aplicativo irá falhar uma verificação de assinatura e não vai começar, e a versão do SQLite incluído com o iPhone é bastante velho para não suporta a leitura única bandeira. Por esta razão, você deve copiar o arquivo de banco de dados de configuração na caixa de areia e aberto que copiar em vez de um em seu pacote.

(Você pode, é claro, o uso SQL e copiar os valores de um banco para outro. Mas se você já está copiando todo o banco de dados de configuração para a sua caixa de areia ... e você deve ser ... então isso é apenas uma passo extra. Basta ligar.)

Espero que alguém pode lhe fornecer mais detalhes. :)

Outras dicas

Quando o usuário atualiza o aplicativo, o antigo pacote aplicativo é desinstalado e o novo pacote de aplicativo é instalado, mas os dados do usuário associados com o pacote aplicativo está intacta.

Assim, suas escolhas são: a) deixar seus dados no pacote aplicativo (que vai ser substituído automaticamente) ou b) copiá-lo unilateralmente a área de dados do usuário na primeira execução (assim você intencionalmente substituí-lo na atualização) .

Vou deixar # 2 a uma pessoa sqlite-qualificado, mas você pode querer usar a tag "sqlite" em vez da tag "mysql" se é isso que você está realmente fazendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top