指定CKDatabaseSubscription的谓词和选项

Nik*_*har 5 database cloud ios swift cloudkit

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

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

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

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

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

Apo*_*ote 2

CKQuerySubscription 并未 100% 弃用。但它的范围改变了

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

共享数据库和私有数据库自定义区域有两个步骤。

第 1 步:CKDatabase订阅私有和共享数据库。

第一步将为您提供私有和共享数据库的区域添加、区域更新或区域删除通知。

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

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

因为我们在步骤 1 中创建了 CKDatabaseSubscription。如果在我们从私有和共享数据库中获取自定义区域时有任何区域的添加、更改或删除。您将收到通知。

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

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