所以在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 }
问题是我没有看到如何使用此方法指定谓词和订阅选项。有人请帮忙。
答案 0 :(得分:2)
CKQuerySubscription不会100%弃用。但其范围已经改变
对于公共数据库默认区域&私有数据库默认区域使用CKQuerySubscription获取通知。
共享数据库有两步流程&私人数据库自定义区域。
步骤1:CKDatabaseSubscription为Private&共享数据库。
第一步是将私有&区域添加,区域更新或区域删除通知共享数据库。
第2步:从共享数据库中获取所有自定义区域&私人数据库。并为每个区域创建CKRecordZoneSubscription。
注意:CKQuerySubscription不适用于共享数据库,但它适用于私有数据库自定义区域,您可以在其中添加谓词和放大器。通知选项。
因为我们在步骤1中创建了CKDatabaseSubscription。如果我们从Private& amp;提取自定义区域时有任何区域的添加或更改或删除。共享数据库。你会收到通知。
如果通知类型为.database,则基于订阅ID从共享或私有数据库中获取所有区域。
如果通知类型为.recordZone,则使用以前保存的服务器更改令牌获取区域ID并获取记录更改。