Distribuzione di DB SQLite iPhone aggiornamento app
Domanda
sto usando SQLite come origine dati in un'applicazione per iPhone. Ho due domande riguardanti aggiornamenti delle applicazioni.
1). I dati sono tutti config / non transazionale. Significato, è in sola lettura. Quando aggiorno / aggiungere i dati di configurazione, vi rilascia un aggiornamento per l'applicazione. Quando un utente riceve un'applicazione per iPhone aggiornato, fa l'originale ottenere disinstallato? Se questo è il caso, sto bene, perché i nuovi dati di configurazione db saranno impiegate. Se questo non è il caso, come faccio a sostituire i dati?
2.) I dati sono config e transazionale. Significato l'utente può salvare i dati nel DB. Quando l'utente aggiorna a una nuova versione dell'app, mi vogliono mantenere i loro dati esistenti, ma sostituire tutti i dati di configurazione. Sto indovinando che avrei bisogno di avere gli script INSERT e UPDATE memorizzati all'interno della app per raggiungere questo obiettivo. Che cosa è un modo efficace per andare su di esso?
Soluzione
cdespinosa ha descritto lo scenario # 1 bene, quindi mi affrontare # 2.
Non ho ancora fatto questo su iPhone, ma in un ambiente desktop il modo più semplice per gestire questo è quello di mantenere i dati di configurazione in un database separato. È possibile collegare a più database piuttosto facilmente. Inizia aprendo il database principale, che dovrebbe probabilmente essere la base di dati che può cambiare. Poi sqlite3_exec
una dichiarazione ATTACH
, che assomiglia a questo:
ATTACH 'filepath' AS config;
Da allora in poi, si può fare qualcosa di simile:
SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;
E 'la mia comprensione che se si scrive al database di configurazione l'applicazione non potrà un controllo firma e non si avvia, e la versione di SQLite incluso con l'iPhone è abbastanza vecchio per non supportare il flag di sola lettura. Per questo motivo, è necessario copiare il file database di configurazione nella sandbox e aprire quella copia al posto di quello in vostro pacco.
(È possibile, naturalmente, utilizzare SQL e copiare i valori da un database a un altro. Ma se siete già copiando l'intero database di configurazione per la vostra sandbox ... e si dovrebbe essere ... allora questo è solo un passo in più. È sufficiente collegare.)
Spero che qualcun altro in grado di fornire ulteriori dettagli. :)
Altri suggerimenti
Quando l'utente aggiorna l'applicazione, il vecchio pacchetto applicazione viene disinstallata e viene installato il nuovo bundle app, ma i dati degli utenti associati al pacchetto app è intatto.
Così le scelte sono ad a) lasciare i vostri dati nel pacchetto app (che sarà sostituito automaticamente) oppure b) unilateralmente copiarlo nell'area dati utente in prima esecuzione (quindi dovrete intenzionalmente sostituirlo durante l'aggiornamento) .
Lascio 2 # per una persona sqlite-informato, ma si consiglia di utilizzare il tag "sqlite" al posto del tag "mysql" se è quello che si sta effettivamente facendo.