2

Gibt es eine Möglichkeit, CloudKit für kürzlich gelöschte Objekte (aus einem bestimmten Zeitstempel, vielleicht) abzufragen, ohne CKFetchRecordChangesOperation zu verwenden? Ich verwende eine öffentliche Datenbank, so dass ich keine benutzerdefinierten Zonen verwenden kann (was eine Voraussetzung für CKFetchRecordChangesOperation wäre) ... also brauche ich eine Möglichkeit, dies mit öffentlichen Datenbanken zu simulieren.CloudKit: CKQueryOperation für gelöschte Datensätze

Ich möchte meinen lokalen Core Data Cache für Änderungen in den CloudKit-Datensätzen effizient aktualisieren können. Wenn Sie nach CloudKit-Datensätzen abfragen, scheint der CKRecord eine Eigenschaft creationDate und modificationDate zu haben, nach der Sie abfragen können, um kürzlich erstellte/geänderte Datensätze anzuzeigen. Dies funktioniert jedoch nicht für Datensätze, die in CloudKit gelöscht wurden.

Was wäre eine effektive Strategie hier?

+0

Sie können ein Abonnement erstellen, das beim Löschen eines Datensatzes gemeldet wird? – user3069232

+1

Die Idee war, Abfragen zu verwenden, da Subskriptionen auf Push-Benachrichtigungen angewiesen sind, die zuverlässig sein können oder nicht, und Sie können eine Pull-to-Refresh-Funktion nicht verwenden, um eine Synchronisation mit Subskriptionen auszulösen –

+0

Nein, es gibt kein einfaches Möglichkeit, abzufragen, was gelöscht wurde. – rmaddy

Antwort

1

Eine Lösung, über die ich nachgedacht habe, ist das Beibehalten einer "deletedDate" -Eigenschaft auf CKRecord. Wenn also Daten gelöscht werden, löschen Sie den Datensatz nicht wirklich aus CloudKit, sondern aktualisieren Sie einfach diese Eigenschaft. Dadurch können andere Geräte nach Datensätzen suchen, die kürzlich gelöscht wurden, sodass Sie den lokalen Cache aktualisieren können. Sie können auch regelmäßig nach Datensätzen suchen, die deletedDate länger als eine Woche oder so haben, und die Datensätze zu diesem Zeitpunkt entfernen (obwohl Sie auf mehrere Geräte achten möchten, die gleichzeitig die Datensätze und andere Randfälle löschen). Nicht die eleganteste Lösung, aber könnte funktionieren. Wenn es eine bessere Option gibt, würde ich es gerne hören.

+1

Kleiner Tipp. In meinem Fall muss ich Multi-User-Unterstützung für öffentliche Datenbank mit Mac OSX-Anwendung implementieren. Also habe ich dateDeleted auch in die Core Data-Entität integriert und die Datenbanksynchronisierung (und das Abonnement) in Mac OS X Teil hinzugefügt. Um "gelöschte" Datensätze auszublenden, wird ein einfaches Vergleichselement zum Array-Controller hinzugefügt. –

0

Eine Lösung, die ich gedacht habe über eine "deletedDate" Eigenschaft auf CKRecord Aufrechterhaltung

Diese nicht

erforderlich ist

Sie wollen ein CKFetchRecordZoneChangesOperation

Go die WWDC Video hier : https://developer.apple.com/videos/play/wwdc2014/231/

https://developer.apple.com/icloud/

+0

Beachten Sie, dass diese API jetzt veraltet ist. Verwenden Sie stattdessen CKFetchDatabaseChangesOperation, um die Änderungen in einer bestimmten Zone abzurufen, die Löschvorgänge enthält. –

Verwandte Themen