Hier ist mein Problem:
Lösungen, die ich erforscht habe:
NSIncrementalStore
class (neu in IOS 5). Ich bin sehr verwirrt darüber, was das genau macht, aber es klingt vielversprechend. Von dem, was ich sagen kann, Unterklasse NSIncrementalStore
, die Ihnen ermöglicht, die regulären Kerndaten API-Aufrufe abzufangen. Ich könnte dann die Informationen an die Kerndaten weitergeben und sie über einen Webservice mit der externen Datenbank synchronisieren. Ich könnte völlig falsch liegen. Aber wenn ich richtig liege, wie würde ich Deltas synchronisieren, wenn die Verbindung zum Internet unterbrochen ist? AFIncrementalStore
- Dies ist eine Unterklasse von NSIncrementalStore
, die AFNetworking
verwendet, um das Web-Service-Stück zu erstellen. RestKit
- Ich bin ein wenig besorgt darüber, wie aktiv diese API ist und sie scheint einen Übergang zur Blockfunktionalität zu durchlaufen. Hat jemand das ausgiebig genutzt? Ich lehne mich zu AFIncrementalStore
hin, da dies (was zu sein scheint) ein Standardansatz ist. Das Problem ist, ich könnte komplett darauf verzichten, was NSIncrementalStore
wirklich ist.
Ein Link zu einem Beispielcode oder Tutorial wäre großartig!
Meine Lösung bestand darin, zwei Kopien des Datensatzes in einer CoreData-Datenbank zu speichern. Einer repräsentiert den zuletzt bekannten Server-Status und ist unveränderbar. Der andere wird vom Benutzer bearbeitet.
Wenn es an der Zeit ist, Änderungen zu synchronisieren, erstellt die App einen Unterschied zwischen den bearbeiteten und unveränderlichen Kopien der Daten. Die App sendet das Diff an einen Webdienst, der das Diff auf seine eigene Kopie der Daten anwendet. Es antwortet mit einer vollständigen Kopie des Datensatzes, den die App auf beide Kopien der Daten überschreibt.
Die Vorteile sind:
Die Nachteile sind:
Hier sind einige der Überlegungen, die ich bei der Entwicklung der Strategie hatte:
Das nächste, was ich von der Out-of-the-Box-Unterstützung gehört habe, ist das neue iCloud / CoreData-Synchronisationssystem in iOS6, das automatisch Elemente aus einer CoreData-Datenbank nach iCloud überträgt, wenn sie sich ändern . Das bedeutet jedoch, dass Sie iCloud verwenden müssen.
EDIT: Das ist sehr spät, ich weiß, aber hier ist eine Klasse, die in der Lage ist, einen Unterschied zwischen zwei NSManagedObject-Instanzen zu erzeugen.
%Vor%Es gibt mehr Informationen darüber, was es macht, wie es es macht und seine Einschränkungen / Annahmen hier:
Verwenden Sie die Parse-Plattform und ihr IOS-SDK, um Informationen zu strukturieren und zu speichern. Es kann Daten lokal zwischenspeichern, so dass Sie es schnell abrufen können, wenn keine Verbindung besteht.
Tags und Links core-data web-services ios5