Ich habe ein Problem beim Erstellen von Abonnements in einer öffentlichen CloudKit-Datenbank. Der Code funktioniert einwandfrei, wenn Sie das Abonnement für den ersten iCloud-Benutzer speichern, aber nicht versuchen, ein geringfügig anderes Abonnement für denselben Datensatztyp für einen zweiten iCloud-Benutzer zu speichern.
Hier ist der Code, der das Abonnement speichert (Antworten in Swift sind auch in Ordnung):
%Vor% _ckUserID
ist ein CKRecordID
, das den aktuellen iCloud-Benutzer darstellt.
_ckdatbase
ist ein CKDatabase
-Verweis auf die öffentliche Datenbank des aktuellen CloudKit-Containers.
Wenn dieser Code auf Gerät A mit Benutzer A ausgeführt wird, wird das Abonnement problemlos gespeichert.
Wenn dieser Code dann auf Gerät B mit Benutzer B ausgeführt wird, schlägt die Subskription mit der folgenden Meldung im Protokoll fehl:
2016-04-19 11: 38: 42: 504 MyApp [560: f03] Fehler beim Versuch, die Zugangsberechtigung des Benutzers zu aktualisieren: & lt; CKError 0x147830530: "Partieller Fehler" (2/1011); "Einige Abonnements konnten nicht geändert werden"; uuid = 98E9F99A-C4F6-4488-8087-45285A7C1DB1; Container-ID="iCloud.com.blah.MyApp"; Teilfehler: { access-_df09e8908eeb9b9f12ebbe935e389d51 = & lt; CKError 0x14664b4e0: "Unbekannter Gegenstand" (11/2003); server message="den erforderlichen Datensatztyp nicht gefunden: _sub_trigger_sub_08b399dc1448e58993a967b704a07ee0" & gt; } & gt;
Der Datensatztyp access
hat ein user
-Feld, das ein Verweis auf eine CKRecordID ist, die eine iCloud-Benutzer-ID darstellt.
Mein Ziel ist es, für jeden Benutzer ein Abonnement zu haben, das es der App ermöglicht, zu wissen, wann ein Datensatz für den aktuellen Benutzer aus dieser Tabelle hinzugefügt, aktualisiert oder gelöscht wird.
Warum kann ich für diesen Datensatztyp kein zweites Abonnement von einem zweiten Benutzer speichern? Ich gebe jedem Abonnement sogar eine eigene ID basierend auf der Benutzer-ID.
Ich habe eine einfache Test-App erstellt, um dieses Problem zu replizieren, und natürlich hat es in meiner Test-App gut funktioniert.
Ich ging zurück zu meiner echten App und nach einigem Graben habe ich dieses Problem gelöst. Ich habe zwei Dinge getan:
zoneID
des Abonnements auf defaultRecordZone
gesetzt habe. Obwohl dieser Fehler nicht wirklich mit dem veröffentlichten Problem zusammenhing, verhinderte dieser Fehler, dass Benachrichtigungen die Geräte erreichten, es sei denn, das Gerät wurde in demselben iCloud-Konto angemeldet, das zum Hinzufügen / Aktualisieren / Löschen des Datensatzes verwendet wurde. Im Grunde genommen war das ein seltsamer Fehler, der behoben wurde, indem einige Dinge im Dashboard zurückgesetzt und die App neu gestartet wurde.
Tags und Links ios cloudkit cksubscription