2017-03-15 2 views
9

Ich lerne gerade, wie man CloudKit Framework verwendet und es fehlt an Dokumentation oder Beispielen, wie Core Data und CloudKit synchronisiert werden.So synchronisieren Sie Datensätze zwischen Core Data und CloudKit effizient

Ich habe alle WWDC Videos angeschaut (2014, 2015, 2016) Dedicated to CloudKit, aber keiner von ihnen sagt uns, wie man die Synchronisierung mit Core Data 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, die CloudKit gewidmet sind, zu abonnieren, aber die Zuordnung mit CoreData ist ein echtes Problem.

Zum Beispiel möchte ich 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 würde gerne ein gemeinsames Synchronisationsmuster haben. Wo sollte die Synchronisierung mit Core Data-Methoden stattfinden und wie sollten sie aussehen?

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

Ich verwende Swift 3, Xcode 8, iOS 10.

+0

Adelmaer, cloudkit speichert Metadaten über die Datensätze, letzte Aktualisierung, zuletzt zugegriffen, Berechtigungen usw. Sie könnten diese Daten in Ihre Kerndaten kopieren und eine Gegenprüfung durchführen, wenn Sie eine Verbindung herstellen, um zu sehen, ob Sie irgendwelche Updates haben. Sie sollten auch auf diese Antwort schauen, könnte etwas sein hier http://stackoverflow.com/questions/24509782/saving-modified-data-in-cloudkit?rq=1 – user3069232

Antwort

4

Core Data bietet bereits den Benutzer mit der Fähigkeit zu iCloud zu synchronisieren. Sie müssen CloudKit nicht verwenden.

Design For Core Data In iCloud

Aber ja, Core Data mit iCloud ist veraltet. Trotzdem, es hat not been discontinued, und es gibt keine unmittelbaren Pläne bei Apple, es zu beenden, sie wollen nur seine Verwendung entmutigen. 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; Das erste ist das Folgende zu verwenden;

Seam in GitHub

Das zweite ist, es manuell zu tun;

Designing for CloudKit

Der Schlüssel hier ist, dass Cloud-Kit, um die Aufzeichnung von Metadaten muss in der Lage seinen Rekord-Updates zuverlässig zu handhaben, so dass Sie, dass Metadaten in Ihrer Core Data-Datenbank gespeichert haben. Die Klasse CKRecord enthält eine Methode encodeSystemFields(with:), die diese Felder in einen Datensatz codiert, der in Ihrer Datenbank gespeichert werden kann, und dann können Sie den entsprechenden Decoder verwenden, wenn Sie den CKRecord wiederherstellen müssen.

Wie auch immer, ich bin dabei, das selbst zu tun. Ich werde dies mit weiteren Informationen aktualisieren, wenn ich es habe.

+0

Kann nicht schwören, aber ich denke nicht Core-Daten können iCloud Sharing durchführen. Wenn Sie diese Funktion benötigen, müssen Sie sie mit CloudKit implementieren. – Jonny

+0

CoreData iCloud ist seit iOS 10 veraltet. Es hat auch nie funktioniert. – Andy

+0

Die dritte Zeile meiner Antwort weist darauf hin. Außer es ist dumm zu sagen, dass es nie funktioniert hat. Aber ja, es gibt bessere Wege, dieses Problem jetzt zu lösen. –

0

Apple hat kürzlich einen Leitfaden veröffentlicht, der diese Frage zu beantworten scheint. In Apples Maintaining a Local Cache of CloudKit Records finden Sie Informationen zum Speichern von CloudKit-Daten auf dem Gerät.

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.