2016-05-26 26 views
3

Um ein CKRecord in eine private CKRecordZone einzufügen, müssen Sie sicherstellen, dass die Zone bereits existiert.Wie Sie wissen, ob die CloudKit Zone bereits existiert

Aber bedeutet es, dass jedes Mal, wenn ich einen Datensatz einfügen muss ich alle Zonen abrufen muss und finde, ob meine Zone mit fetchAllRecordZonesWithCompletionHandler existiert? Es wäre nicht sehr effizient.

Was ist die beste Strategie zu übernehmen?

Die meisten Beispiele, die ich gesehen habe, zeigen, wie man eine Zone erstellt und einen Datensatz hinzufügt. Aber Sie werden nicht die Zone jedes Mal zu erstellen, und man kann nicht einfach davon ausgehen, es existiert ...

-Code unten wird fehlschlagen, wenn die Zone nicht bereits erstellt wurde

let customZone = CKRecordZone(zoneName: self.zoneName!) 
// Create a CKRecord 
let lessonRecord = CKRecord(recordType: self.recordType, zoneID: customZone.zoneID) 

Vielen Dank für Ihre Hilfe.

Antwort

3

Um zu sehen, ob eine bestimmte Zone existiert, verwenden Sie CKFetchRecordZonesOperation und übergeben Sie nur die eine Datensatz-ID.

Sie müssen dies nur einmal tun, wenn Ihr Code richtig eingerichtet ist.

Erstellen Sie eine Klasse, die eine Aufzeichnungszone darstellt. Diese Klasse sollte alle CloudKit-Vorgänge für eine bestimmte Zone ausführen. Wenn Sie eine Instanz dieser Klasse für eine bestimmte Zone initialisieren, können Sie prüfen, ob die Zone existiert. Wenn nicht, dann erstellen Sie die Zone. Dann verwenden Sie diese spezifische Instanz dieser Zonen-Helper-Klasse jedes Mal, wenn Sie Daten in diese Zone lesen oder schreiben müssen.

Natürlich muss jeder Lese- und Schreibvorgang die Fehlerergebnisse auf CKErrorZoneNotFound Fehler überprüfen. Wenn Sie einen solchen Fehler erhalten, bedeutet dies wahrscheinlich, dass die Zone aus einer anderen Kopie der App gelöscht wurde.

+0

Es ist komisch, für mich. Warum können wir nicht einfach Zonen aus dem Dashboard erstellen? Bedeutet dies auch, dass wir eine Zone aus einer Entwicklerversion unserer App erstellen können, diesen Code dann löschen und nie wieder Zonencode in Release-Builds verwenden, vorausgesetzt, dass die Zone existiert? (Keine Möglichkeit, Zonen aus der App zu löschen) – Jonny

+0

Zonen existieren nur die private Datenbank. Sie können Zonen oder Datensätze in einer privaten Datenbank nicht vorab ausfüllen. Sie müssen für jeden Benutzer erstellt werden, der Ihre App verwendet. – Duzmac

+0

@Jonny Es würde nichts nützen, eine Zone in der dev-Version zu erstellen. 1) Die Zone würde nur in Ihrer eigenen privaten Datenbank in Entwicklung existieren. 2) Die Zone würde in der produktiven privaten Datenbank nicht existieren. – rmaddy