指定CKDatabaseSubscription的谓词和选项

时间:2017-02-06 04:55:49

标签: ios swift database cloud cloudkit

所以在IOS 9中可以这样做:

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

但是,现在使用Swift 3,不推荐使用CKQuerySubscription,建议将CKDatabaseSubscription用于共享数据库。我有以下代码:

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

问题是我没有看到如何使用此方法指定谓词和订阅选项。有人请帮忙。

1 个答案:

答案 0 :(得分:2)

CKQuerySubscription不会100%弃用。但其范围已经改变

对于公共数据库默认区域&私有数据库默认区域使用CKQuerySubscription获取通知。

共享数据库有两步流程&私人数据库自定义区域。

步骤1:CKDatabaseSubscription为Private&共享数据库。

第一步是将私有&区域添加,区域更新或区域删除通知共享数据库。

第2步:从共享数据库中获取所有自定义区域&私人数据库。并为每个区域创建CKRecordZoneSubscription。

注意:CKQuerySubscription不适用于共享数据库,但它适用于私有数据库自定义区域,您可以在其中添加谓词和放大器。通知选项。

因为我们在步骤1中创建了CKDatabaseSubscription。如果我们从Private& amp;提取自定义区域时有任何区域的添加或更改或删除。共享数据库。你会收到通知。

如果通知类型为.database,则基于订阅ID从共享或私有数据库中获取所有区域。

如果通知类型为.recordZone,则使用以前保存的服务器更改令牌获取区域ID并获取记录更改。