Domanda

So che questa domanda è stato possed prima, ma la spiegazione è stata un po 'poco chiaro per me, la mia domanda è un po' più generale. Sto cercando di concettualizzare come si potrebbe aggiornare periodicamente i dati in un applicazione per iPhone, utilizzando un servizio Web remoto. In teoria una parte dei dati sul telefono sarebbe essere sincronizzato periodicamente (solo quando aggiornato). Mentre altri dati richiederebbe l'utente sia on-line, e essere richiesto al volo.

Concettualmente, questo sembra possibile utilizzando XML-RPC o dati JSON e Core. Mi chiedo se qualcuno ha un parere sul modo migliore per attuare questo, io sono un novizio sviluppatore iPhone, ma capisco gran parte del processo concettualmente.

Grazie

È stato utile?

Soluzione

Per sincronizzare un insieme di entità, quando non si ha il controllo del server, qui è un approccio:

  1. Aggiungere un attributo touched BOOL alla descrizione dell'entità.

  2. In un tentativo di sincronizzazione, contrassegnare tutte le istanze di entità come intatto (touched = [NSNumber numberWithBool:NO]).

  3. Loop attraverso il server-side (JSON) istanze e aggiungere o entità di aggiornamento dal vostro negozio di Core Data al tuo negozio sul lato server, o viceversa. La direzione di aggiornamento dipenderà dalla vostra politica di sincronizzazione, e quali dati è "più fresco" su entrambi i lati. In entrambi i casi, Mark ha aggiunto, aggiornato o Sync'ed entità Core Data come toccato (touched = [NSNumber numberWithBool:YES])

  4. A seconda della politica di sincronizzazione, eliminare tutte le istanze di entità dal vostro negozio Core Data, che sono ancora incontaminata. entità Untouched sono stati presumibilmente eliminati dal vostro negozio sul lato server, perché nessuna aggiunta, l'aggiornamento o la sincronizzazione evento ha avuto luogo tra il negozio di Core Data e il server per quegli oggetti.

La sincronizzazione è una discreta quantità di lavori di realizzazione e dipenderà da che grado di sincronizzazione è necessario il supporto. Se stai solo tirando i dati, il punto 3 è molto più semplice, perché non sarà necessario aggiornamenti Object Push al server.

Altri suggerimenti

La sincronizzazione è dura, molto dura. Idealmente si vorrebbe ricevere delta delle modifiche dal server e quindi utilizzando un ID univoco per ogni record in Core Data, aggiornare solo i record che sono nuovi o modificati.

Supponendo che si può fare, allora il codice è piuttosto semplice. Se stai sincronizzando in entrambe le direzioni, allora le cose si complicano, perché è necessario tenere traccia delta su entrambi i lati e le collisioni maniglia.

Può chiarire che tipo di sincronizzazione che si vogliono realizzare? E 'bidirezionale o tirare solo?

ho una risposta, ma è sucky. Attualmente sto cercando una soluzione più accettabile / affidabile (vale a dire qualsiasi cosa Marcus Zarra cuochi).

Quello che ho bisogno fatto un lavoro ... sul serio, perché non funziona tutto il tempo ...

Il dispositivo mobile ha un catalogo JSON di entità, le loro versioni, e un URL che rimanda a un file JSON con il contenuto di entità.

Il server ha la stessa configurazione, il catalogo dei soggetti, ecc.

Ogni volta che il dispositivo mobile si avvia, confronta le versioni entità del suo catalogo locale con il catalogo sul server. Se uno qualsiasi di queste versioni sul server sono più recenti, offre all'utente la possibilità di scaricare gli aggiornamenti di entità.

Quando l'utente decide di aggiornamento, il dispositivo mobile ha ora l'URL per ognuno dei nuovi / entità cambiati e lo scarica. Una volta scaricato, l'applicazione sarà soffiare via tutti gli oggetti per ciascuna delle entità cambiato, e quindi inserire i nuovi oggetti da JSON. In caso di errore, le eliminazioni / inserimenti sono rotolati all'epoca pre-aggiornamento di stato.

Questo funziona, sorta di. Non riesco a prenderlo in una sessione di debug quando si va a monte, quindi non sono sicuro di quello che potrebbe causare la corruzione o incoerenze nel processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top