2012-03-28 8 views
4

RestKit mit Core-Daten verwenden Ich biete Offline-Unterstützung, wenn der Benutzer Objekte ohne Internetverbindung hinzufügt, bearbeitet oder löscht, indem er Objekte markiert und mit Core Data speichert.RestKit - Nach Offline-Speicherung hinzugefügte/bearbeitete/gelöschte Objekte senden

Wenn das Internet wieder verfügbar ist, hole ich alle hinzugefügten/bearbeiteten/gelöschten Objekte, speichere sie in Arrays und benutze die normalen Methoden und Schleife für jedes Element, um sie auf den Server zu legen.

Liste der Arrays
- fetchedAddedCompanies
- fetchedEditedCompanies
- fetchedAddedContacts
- fetchedEditedContacts
- fetchedDeletedContacts

Init-Methode (Beispiel für bearbeitete Unternehmen)

// Added Companies 
... 

// Edited Companies 
for (Company *tempObj in fetchedAddedCompanies) 
{ 
    // Find keys for selected languages 
    [self updateAccountToServer:tempObj:addCompanyContext]; 
} 

// ... 

Am Ende der updateAccountToServer Ich poste das Objekt (self.company) mit seiner Zuordnung zum Server.

... 
[objectManager postObject:self.company mapResponseWith:[companyMapper inverseMapping] delegate:self]; 
... 

Frage

Ich bin für eine effizientere Lösung suchen, wenn der Benutzer ein paar Objekte aktualisieren hat und - dass die besondere ein - ein paar neue Objekte, da im Gegensatz zu allen Bearbeiten/Löschen hinzugefügt hat Methoden gibt der Server eine ID für jedes neu erstellte Objekt zurück, das gespeichert wird.

1) Vermeiden Sie z. updateAccountToServer für jedes bearbeitete Objekt und ein Array von Objekten senden, anstatt
2) Mit dem RKRequestQueue zusammen mit den RKObjectManager (regarding this question and a good answer)

Meiner Meinung 1) wird schwer sein, weil die resourcePath für jede Anforderung zu implementieren enthält eine eindeutige ID, ich habe 2 so versucht), aber für jede Anforderung die Möglichkeit binden die Zuordnung fehlt

[syncQueue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:tempString delegate:self]]; 

Vielen Dank für Ihre Ideen mit!

Antwort

1

Ich und ein paar andere arbeiten aktiv an einer Entwicklungsabteilung, um dies automatisch in RestKit zu integrieren.

Wir implementieren einen Synchronisationsmanager innerhalb von RK, der den NSManagedObjectContext auf Änderungen überwacht. Wenn das Netzwerk nicht verfügbar ist, werden diese Anforderungen in Warteschlangen eingereiht, bis das Netzwerk zurückkommt.

Wir würden gerne mehr Hilfe/Ideen auf dem Code haben, also wenn Sie uns mehr über Ihren Anwendungsfall auf dieser Seite sagen können:

https://github.com/RestKit/RestKit/pull/573

+1

Dieser Zweig scheint jetzt inaktiv zu sein, vorausgesetzt, es war ein Zweig von RestKit 0.10. Arbeitet jemand in einem ähnlichen Zweig in Restkit 0.20.x? – Diego

1

Für 1, können Sie die NSArray kapseln von eingefügten/aktualisierten/gelöschten Objekten in ein neues Objekt, dann posten Sie es auf dem Server. Damit dies funktioniert, müssen Sie sicherstellen, dass die korrigierten Bits für die zu entschlüsselnden Objekte auf den geänderten Objekten gesetzt werden. Außerdem müssen Sie sicherstellen, dass der Server das Objekt empfangen und dekonstruieren kann, um ein Array modifizierter Objekte zu erhalten.