Speichern eines Array von Objekten in CloudKit

8

Ich bin verwirrt darüber, wie ein Objekt, das ein Array anderer Objekte enthält, am besten in CloudKit gespeichert wird.

Angenommen, ich habe eine App mit der Aufgabenliste, die verschiedene Objektgruppen enthält. Wie würde ich eine ganze Sammlung von Gegenständen speichern / holen?

Wäre ich beim Record-Typ Collection, der ein String-Attribut namens "Name" und dann ein Referenzlisten-Attribut namens "Items" hätte?

Ich weiß, dass der Record-Elementtyp ein Referenzattribut namens "Collection" haben muss, weil CloudKit von einem untergeordneten Objekt auf das übergeordnete Objekt verweist.

Ich habe es geschafft, eine Sammlung ohne Instanzen von Item mit dem folgenden Code zu speichern

%Vor%

Die andere Möglichkeit besteht darin, beim Speichern einer Collection alle Instanzen von Item zu durchlaufen und diese auch einzeln zu speichern, wobei das Reference Attribute to Collection die Verbindung auf der CloudKit-Seite herstellt, aber das scheint viel zu viele Netzwerkaufrufe zu sein.

    
William Robinson 07.01.2015, 17:36
quelle

1 Antwort

2

Für die Item Datensätze benötigen Sie CKReference für Collection . Sie können dann CKReferenceAction darauf einstellen. Sie müssen keine CKReference -Liste für Collection erstellen.

Eine Liste von CKReference-Objekten ist nur dann eine Option, wenn Sie CKReferenceAction.None verwenden möchten. Dies würde bedeuten, dass es keine strikte Beziehung zwischen den beiden recordTypes

gibt

Wenn Sie ein Objekt Collection haben, können Sie den Item rekordTyp einfach mit einem Prädikat abfragen, das überprüft, ob die CKReference die von Collection ist.

Normalerweise müssen mehrere Datensätze nicht gespeichert werden. Sobald Sie eine Collection mit Items erstellt haben, kann die Relation unverändert bleiben. Wenn Sie mehrere Datensätze ändern müssen, können Sie versuchen, CKModifyRecordsOperation zu verwenden, das mehrere Elemente in einer Aktion unterstützt.

Wenn Sie vorhandene Item recordTypes mit einem Collection verknüpfen, müssen Sie jedes Item speichern, da es eine CKReference für Collecion hat. Der Item hat sich geändert, daher muss er gespeichert werden.

    
Edwin Vermeer 14.01.2015, 12:13
quelle

Tags und Links