2009-02-16 10 views
9

Uso sqlite come origine dati in un'app per iPhone. Ho due domande riguardo gli aggiornamenti dell'applicazione.Distribuzione del DB sqlite sull'aggiornamento dell'app iPhone

1.) I dati sono tutti config/non transazionali. Significato, è readonly. Quando aggiorno/aggiungo dati di configurazione, eseguirò un aggiornamento per l'app. Quando un utente ottiene un'app per iPhone aggiornata, l'originale viene disinstallato? Se questo è il caso, sto bene perché verranno distribuiti i nuovi dati di configurazione di db. In caso contrario, come posso sostituire i dati?

2.) I dati sono config e transazionali. Significa che l'utente può salvare i dati nel db. Quando l'utente si aggiorna a una nuova versione dell'app, voglio mantenere i dati esistenti ma sostituire tutti i dati di configurazione. Suppongo che avrei bisogno di avere gli script INSERT e UPDATE memorizzati all'interno dell'applicazione per realizzare questo. Qual è un modo efficiente per farlo?

+0

Stai dicendo che stai installando MySQL su iPhone? Dubito seriamente che potrebbe funzionare. O stai dicendo che l'iPhone sta interrogando un database MySQL su un server da qualche parte? –

+0

Sì - mysql è su iPhone, che è uno scenario comune. Per essere espliciti, la domanda è per gli sviluppatori di iPhone. – 4thSpace

+0

SQLite è uno scenario comune su un iPhone (è integrato). L'uso di MySQL è pazzesco. –

risposta

11

cdespinosa ha descritto bene lo scenario n. 1, quindi affronterò il n.

Non l'ho ancora fatto su iPhone, ma su un ambiente desktop il modo più semplice per gestirlo è quello di mantenere i dati di configurazione in un database separato. È possibile collegarsi a più database piuttosto facilmente. Inizia aprendo il tuo database principale, che probabilmente dovrebbe essere il database che può cambiare. Poi sqlite3_exec un ATTACH dichiarazione, 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 dell'applicazione sarà fallisce il controllo della firma e non si avvia, e la versione di SQLite inclusa con l'iPhone è abbastanza vecchia da non supportare il flag di sola lettura. Per questo motivo, è necessario copiare il file del database di configurazione nella sandbox e aprire quella copia anziché quella nel pacchetto.

(È possibile, ovviamente, utilizzare SQL e copiare i valori da un database a un altro, ma se si sta già copiando l'intero database di configurazione nella sandbox ... e si dovrebbe essere ... quindi è solo un passaggio in più. Basta allegare.)

Spero che qualcun altro possa fornirti ulteriori dettagli. :)

5

Quando l'utente aggiorna l'app, il vecchio pacchetto di app viene disinstallato e il nuovo pacchetto di app è installato, ma i dati dell'utente associati al pacchetto di app sono intatti.

Quindi le tue scelte sono: a) lasciare i tuoi dati nel pacchetto dell'app (verrà sostituito automaticamente) o b) copiarlo unilateralmente nell'area dati utente al primo avvio (quindi dovrai sostituirlo intenzionalmente all'aggiornamento).

Lascio il numero 2 a una persona con conoscenza in sqlite, ma è possibile che si desideri utilizzare il tag "sqlite" anziché il tag "mysql" se è ciò che si sta effettivamente facendo.

+0

Sì, ha aggiornato il tag. Non credo che la scelta funzioni perché l'utente ha anche accumulato dati quando è pronto per l'aggiornamento. Se scelgo la scelta b, da dove viene copiato il db se non il bundle?Inoltre, non posso "sostituire" i dati dell'utente. Solo dati di configurazione (non utente). Grazie. – 4thSpace