如何正确调用“fetchAllSubscriptionsOperation()”来检索 CloudKit 个订阅?

How to properly call `fetchAllSubscriptionsOperation()` to retrieve CloudKit subscriptions?

我正在尝试获取与当前用户关联的所有订阅。 According to the documentation,要调用的函数是:

CKFetchSubscriptionsOperation.fetchAllSubscriptionsOperation()

我这样调用函数:

    let op = CKFetchSubscriptionsOperation.fetchAllSubscriptionsOperation()
    op.fetchSubscriptionCompletionBlock = { (subs, error) in
        print("*** fetched subs: \(subs)")
    }
    let q = OperationQueue()
    q.addOperation(op)

但是,subs 参数 returns 是一个空字典 (Optional([:]))。 error 参数是 nil。我刚开始使用 NSOperation,所以我想知道我是否做错了什么。

(为了确认存在要检索的订阅,我单独调用了容器的 publicDatabase.fetchAllSubscriptions() 函数。这个 returns 是预期的当前用户的订阅。不幸的是,它也 returns与架构中所有其他用户关联的订阅。)

您的示例代码没有在 CKFetchSubscriptionsOperation 上设置容器和数据库。并且由于您正在将操作添加到您自己的 OperationQueue,因此您需要设置这些。

选项#1:

设置容器和数据库直接运行。

let op = CKFetchSubscriptionsOperation.fetchAllSubscriptionsOperation()
op.fetchSubscriptionCompletionBlock = { (subs, error) in
    print("*** fetched subs: \(subs)")
}
op.container = CKContainer.default()
op.database = CKContainer.default().publicCloudDatabase
let q = OperationQueue()
q.addOperation(op)

选项#2:

将操作添加到所需数据库的队列(为您设置)。

let op = CKFetchSubscriptionsOperation.fetchAllSubscriptionsOperation()
op.fetchSubscriptionCompletionBlock = { (subs, error) in
    print("*** fetched subs: \(subs)")
}
CKContainer.default().publicCloudDatabase.add(op)