2016-05-26 14 views
3

プライベートCKRecordZoneにCKRecordを追加するには、ゾーンが既に存在することを確認する必要があります。CloudKitゾーンが既に存在するかどうかを確認する方法

しかし、レコードを挿入する必要があるたびに、すべてのゾーンを取得し、ゾーンが存在するかどうかをfetchAllRecordZonesWithCompletionHandlerで調べる必要がありますか?あまり効率的ではありません。

採用する最良の戦略は何ですか?

私が見たほとんどの例では、ゾーンを作成してレコードを追加する方法を示しています。しかし、ゾーンはあなたのためにすでに

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

おかげで作成されていない場合、以下のコードは失敗します、あなたは、ゾーンを毎回作成するつもりはありません、あなたはちょうどそれが存在すると仮定することはできません...

助けて。

答えて

3

特定のゾーンが存在するかどうかを確認するには、CKFetchRecordZonesOperationを使用し、1つのレコードゾーンIDだけを渡します。

コードが正しく設定されている場合は、この操作を1回だけ行う必要があります。

レコードゾーンを表すクラスを作成します。このクラスは、指定されたゾーンのすべてのCloudKit操作を実行する必要があります。特定のゾーンのこのクラスのインスタンスを初期化すると、そのゾーンが存在するかどうかを確認できます。そうでない場合は、ゾーンを作成します。次に、そのゾーンにデータを読み書きする必要があるたびに、このゾーンヘルパークラスの特定のインスタンスを使用します。

もちろん、すべての読み取りおよび書き込み操作では、エラー結果を確認してCKErrorZoneNotFoundエラーをチェックする必要があります。このようなエラーが発生すると、ゾーンがアプリの別のコピーから削除された可能性があります。

+0

それは私には変です。なぜダッシュボードからゾーンを作成できないのですか?これはまた、アプリケーションの開発版からゾーンを作成し、そのコードを削除して、ゾーンが存在すると仮定してリリースビルドでゾーンコードを再度使用しないことを意味しますか? (アプリケーションからゾーンを削除する方法も使用していません) – Jonny

+0

ゾーンはプライベートデータベースにのみ存在します。誰かのプライベートデータベースにゾーンやレコードをあらかじめ書き込むことはできません。あなたのアプリを使用するユーザーごとに作成する必要があります。 – Duzmac

+0

@Jonnyそれは開発版でゾーンを作成するのに良いことはありません。 1)ゾーンは、開発中の自分のプライベートデータベースにのみ存在します。 2)ゾーンはプロダクションプライベートデータベースに存在しません。 – rmaddy

関連する問題