So synchronisieren Sie Datensätze zwischen Core Data und CloudKit effizient

9

Ich lerne gerade, wie man CloudKit Framework verwendet, und es fehlt an Dokumentation oder Beispielen, wie man Core Data und CloudKit synchronisiert.

Ich habe alle WWDC-Videos (2014, 2015, 2016) gesehen, die CloudKit vorbehalten sind, aber keiner von ihnen sagt uns, wie man die Synchronisierung mit Core-Daten implementiert. Ich kann keine neuen Beispiele, Tutorials oder Bücher finden, die zeigen, wie diese Synchronisierung implementiert wird.

Ich weiß, dass es effektiv ist, Operations API von CloudKit (nicht Convenience API) zu verwenden und Änderungen wie in den neuen WWDC 2016-Videos zu abonnieren, die CloudKit vorbehalten sind, aber das Mapping mit CoreData ist ein echtes Problem.

Nehmen wir beispielsweise an, ich möchte eine App ähnlich der Notes App erstellen. Im Offline-Modus kann der Benutzer seine Notizen erstellen und mit ihnen arbeiten und sie in seiner Stammdaten-Datenbank speichern. Wenn das Gerät online geht, überprüft die App, was sich auf dem Server geändert hat, und speichert neu erstellte Datensätze auf dem Server (CloudKit).

Wenn die App gestartet wird, werden auch Änderungen vom CloudKit abgerufen. Wenn Änderungen vorgenommen werden, wird der lokale Cache (Core Data) mit den neuen Änderungen aktualisiert.

Ich hätte gerne ein gemeinsames Synchronisierungsmuster. Wo sollte die Synchronisierung mit Core Data-Methoden und wie sie aussehen sollen?

Ich würde mich über jede Information oder Hilfe darüber freuen.

Ich verwende Swift 3, Xcode 8, iOS 10.

    
Adelmaer 15.03.2017, 21:08
quelle

2 Antworten

4

Core Data bietet dem Benutzer bereits die Möglichkeit, mit iCloud zu synchronisieren. Sie müssen CloudKit nicht verwenden.

Design für Core-Daten in iCloud

Aber ja, Core Data mit iCloud ist veraltet. Trotzdem wurde nicht eingestellt , und es gibt keine unmittelbaren Pläne bei Apple, es einzustellen, sie wollen einfach nur um seine Verwendung zu verhindern. Es hat jedoch auch Probleme mit der Rationalisierung von Updates von mehreren Geräten.

In jedem Fall habe ich mir die Frage gestellt, wie ich das mit Cloud-Kit selbst machen könnte. Zwei Antworten; Die erste ist die folgende;

Naht in GitHub

Das zweite ist, es manuell zu machen;

Entwerfen für CloudKit

Der Schlüssel hier ist, dass Cloud Kit die Datensatzmetadaten benötigt, um Datensatzaktualisierungen zuverlässig verarbeiten zu können. Daher müssen Sie diese Metadaten in Ihrer Core Data-Datenbank speichern. Die Klasse CKRecord enthält eine Methode encodeSystemFields (mit :) , die diese Felder in einen Datensatz kodieren, der in Ihrer Datenbank gespeichert werden kann, und dann können Sie Verwenden Sie den entsprechenden Decoder, wenn Sie den CKRecord wiederherstellen müssen.

Jedenfalls bin ich dabei, das selbst zu machen. Ich werde dies mit mehr Informationen aktualisieren, wenn ich es habe.

    
Owen Godfrey 28.06.2017 10:49
quelle
0

Apple hat kürzlich einen Leitfaden veröffentlicht, der diese Frage zu beantworten scheint. Sehen Sie sich Apples Einen lokalen Cache von CloudKit-Datensätzen verwalten an, um zu sehen wie man CloudKit Daten auf dem Gerät speichert.

Dieses Handbuch enthält zwar keinen Beispielcode zum Schreiben auf das Gerät, es beantwortet jedoch den Rest der Frage. Hier erfahren Sie, wie Sie Änderungen von CloudKit abrufen und Daten erstellen, die auf dem Gerät gespeichert werden können.

    
Jake3231 24.02.2018 13:57
quelle