Sto lavorando a un'app per iPhone che estrae dati da un server (XML, JSON, ecc.) E mi chiedo quale sia il modo migliore per implementare i dati di sincronizzazione . I criteri sono la velocità (meno scambio di dati di rete), la robustezza (recupero dei dati in caso di aggiornamento fallito), l'accesso offline e la flessibilità (adattabile quando la struttura del database cambia leggermente, come una nuova colonna). So che varia da app a app, ma voi ragazzi potete condividere parte della vostra strategia/esperienza?La migliore strategia per la sincronizzazione dei dati nell'app per iPhone
Per quanto mi riguarda, sto pensando a qualcosa di simile:
1) Conservare Ultima modifica data data iPhone
2) Al momento del lancio, inviare un messaggio come getNewData.php LastModifiedDate = ...?
3) Il server elaborerà e restituirà solo i dati modificati dall'ultima volta.
4) Questi dati vengono formattati come così:
<+><data id="..."></data></+> // add this to SQLite/CoreData
<-><data id="..."></data></-> // remove this
<%><data id="..."><attribute>newValue</attribute></data></%> // new modified value
Non voglio fare < +>, < ->, <%> ... anche per ogni attributo, perché sarebbe troppo complicato, quindi probabilmente quando si riceve un campo <%, vorrei semplicemente rimuovere i dati con l'id specificato e quindi aggiungerlo di nuovo (supponendo che l'ID qui non sia un campo auto-incrementato automaticamente).
5) Una volta scaricato e aggiornato tutto, aggiornerò il campo Data ultima modifica.
Il problema principale di questa strategia è: Se la rete si arresta quando sto aggiornando qualcosa => la data dell'ultima modifica non è ancora stata aggiornata => la prossima volta rilancio l'app, dovrò passare attraverso la stessa cosa ancora. Per non parlare di potenziali dati incoerenti. Se io uso una tabella temporanea per l'aggiornamento e rendere l'intera cosa atomica, funzionerebbe, ma poi di nuovo, se l'aggiornamento è troppo lungo (molti dati cambiano), l'utente deve attendere molto tempo prima che i nuovi dati siano disponibili. Devo utilizzare Data ultima modifica per ciascun campo dati e aggiornare i dati gradualmente?