2017-02-06 6 views
5

を指定します。だからIOS 9でこれを行うことが可能であったCKDatabaseSubscriptionの述語とオプション

let subscription = CKQuerySubscription(recordType: "SomeType", predicate: somePredicate, subscriptionID: someSubscriptionID, options: [.firesOnRecordCreation, .firesOnRecordDeletion]) 
    subscription.notificationInfo = ... 
    publicDatabase.save(subscription) { (savedSubscription, error) in } 

しかし、今スウィフト3で、CKQuerySubscriptionは廃止されており、CKDatabaseSubscriptionは、共有データベースのために推奨されます。

let subscription = CKDatabaseSubscription(subscriptionID: someSubscriptionID) 
    subscription.recordType = "SomeType" 
    publicDatabase.save(subscription) { (savedSubscription, error) in } 

問題は、私は1つの述語と、このメソッドを使用してサブスクリプションオプションを指定することができますどのように表示されていないということです:私は、次のコードを持っています。誰か助けてください。

+0

['CKQuerySubscription'](https://developer.apple.com/reference/cloudkit/ckquerysubscription)**はまだ廃止されていません**あなたは引き続き使用できます。 –

+0

私の悪い私はCKSubscriptionを意味した。また、CKQuerySubscriptionでは共有データベースを使用できません。 –

+1

私はそれを見ても、あなたが所有者であれば、プライベートデータベースでも 'CKQuerySubscription'を行うことができます。しかし、参加者にとって、あなたは 'CKDatabaseSubscription'を使う必要があり、それは述語を持っていません(まだ?)。 – paiv

答えて

2

CKQuerySubscriptionは100%推奨されていません。しかし、その範囲が変更されました

パブリックデータベースのデフォルトゾーンについて&プライベートデータベースデフォルトのゾーンは、通知を取得するためにCKQuerySubscriptionを使用します。

共有データベース&プライベートデータベースカスタムゾーンの2つのステッププロセスがあります。

ステップ1:CKDatabaseSubscription to Private &共有データベース。

最初の手順では、ゾーンの追加、ゾーンの更新、またはゾーンの削除通知がプライベートの&共有データベースに送られます。

ステップ2:共有データベースからすべてのカスタムゾーンを取得します&プライベートデータベース。すべてのゾーンに対してCKRecordZoneSubscriptionを作成します。

注:CKQuerySubscriptionは共有データベースでは機能しませんが、述語&通知オプションを追加できるプライベートデータベースカスタムゾーンでは機能します。

手順1でCKDatabaseSubscriptionを作成したため、プライベート&共有データベースからカスタムゾーンをフェッチしているときに、ゾーンの追加または変更または削除があった場合。通知が届きます。

通知タイプが.databaseの場合、サブスクリプションIDに基づいて、共有またはプライベートデータベースからすべてのゾーンをフェッチします。

通知タイプが.recordZoneの場合、以前に保存したサーバー変更トークンを使用してゾーンIDを取得し、レコード変更をフェッチします。

関連する問題