2015-09-25 8 views
6

Wie funktioniert .DeleteSelf wirklich? Docs sagt:CKReference .DeleteSelf-Attribut hat keine Auswirkung

Wenn das Aktion des Referenzobjekts zu CKReferenceActionDeleteSelf gesetzt ist, das Ziel der Referenz, dass der Rekord in der recordID der Referenz gespeichert ist eigenschafts wird Eigentümer des Quelldatensatzes. Durch das Löschen des Zieldatensatzes (Eigentümer) werden alle Quelleinträge gelöscht.

aber mein Eindruck ist, dass das Löschen eines Ziels Quelle nicht immer löschen wird. Und es ist ziemlich ärgerlich, wenn es in den Container bleibt, Client es herunterlädt, und erwarten, dass der Bezugspunkt irgendwo, aber Ziel existiert nicht beim Aufbau Scheibe des Server-Datenspeichers auf dem Client?

Wie behandeln Sie diesen Fall? Sie ignorieren diese Art von Datensätzen? Oder Sie suchen regelmäßig nach dem CloudKit-Speicher und suchen nach beschädigten Datensätzen, um sie zu löschen?

Oder, anstatt einen Datensatz zu löschen, ist es besser, ein Attribut zu setzen, dass es in einem gelöschten Zustand ist, aber es in der Datenbank behalten?

+0

sollten Sie in der Lage sein, auf der .DeleteSelf zu verlassen. Wenn es nicht funktioniert, sollten Sie unter http://bugreport.apple.com einen Fehlerbericht erstellen. Wenn Sie eine Problemumgehung für diesen Fehler erstellen möchten und Sie die Kontrolle darüber haben, was in dem Moment passiert, in dem Sie einen Fehler entfernen Ich denke, es wäre am besten, alle zugehörigen Datensätze gleichzeitig manuell zu entfernen. –

+0

Ich sehe auch intermittierenden Verhalten mit .DeleteSelf –

+0

Ich bin in diesem Problem. Ich habe mehrere Tabellen mit einer Eins-zu-viele-Beziehung zu einer Haupttabelle. In der öffentlichen Datenbank füge ich den Hauptdatensatz und dann einige Datensätze in den anderen Tabellen hinzu. Wenn dies alles von einem Benutzer ausgeführt wird und kein anderer Benutzer auf die Daten zugreift, führt das Löschen des Master-Datensatzes dazu, dass alle anderen Datensätze wie erwartet gelöscht werden. Sobald jedoch ein anderer Benutzer auf die Daten zugreift, tritt das Kaskadenlöschung nicht auf und nur der Stammsatz wird gelöscht. Scheint sinnlos, wenn Sie nicht auf diese Funktion zählen können. – rmaddy

Antwort

0

Wenn Sie über CloudKit Dashboard löschen, müssen Sie warten, bevor Sie die Datensatztypen wechseln, um das andere Ende der Referenz zu überprüfen. Höchstwahrscheinlich haben Sie gewechselt, bevor das Löschen tatsächlich passiert ist. Sie können den Web-Inspektor von Safari auf der Registerkarte "Netzwerk" verwenden, um zu überprüfen, wann das Löschen tatsächlich abgeschlossen wurde. Es dauert sehr lange, mehrere Datensätze zu löschen.

1

Ich kämpfte gerade mit diesem für eine Weile und ich dachte, ich würde meine Erkenntnisse teilen ...

Es ist im Grunde ein Berechtigungsproblem. Das kaskadierende Löschen funktioniert nur, wenn der Benutzer, der die Datensätze löscht, Schreibrechte für alle Datensätze hat, die gelöscht werden müssen. Im CloudKit Dashboard funktioniert das kaskadierende Löschen nur für die Datensätze, die mit dem iCloud-Konto des Entwicklers erstellt wurden.

Wenn Sie Datensätze löschen müssen, die nicht dem Benutzer gehören, der sie löscht, können Sie Schreibrechte für einen Datensatztyp unter Sicherheit hinzufügen.

enter image description here

+0

Meine Datensätze befinden sich in derselben Zone, die vom selben Benutzer erstellt wurde, und Referenzen werden immer noch nicht gelöscht. Ich denke, es ist ein Fehler im CloudKit Dashboard. Und ja, es passiert immer noch Ende 2017. :) –

Verwandte Themen