Wie kann jeder iCloud-Benutzer ein benutzerspezifisches Abonnement in CloudKit speichern?

9

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.

    
rmaddy 19.04.2016, 18:11
quelle

1 Antwort

4

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:

  1. Im CloudKit Dashboard habe ich alle bestehenden Abonnement-Typen gelöscht.
  2. Ich habe einen Fehler in meinem Code behoben, bei dem ich versehentlich 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.

    
rmaddy 24.04.2016, 03:18
quelle

Tags und Links