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

时间:2016-10-30 05:28:03

标签: ios 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参数返回一个空字典(Optional([:]))。 error参数是nil。我刚开始使用NSOperation,所以我想知道我做错了什么。

(作为确认要检索订阅的确认,我单独调用容器的publicDatabase.fetchAllSubscriptions()函数。这个函数按预期返回当前用户的订阅。不幸的是,它还返回与模式中的每个其他用户关联的订阅。)

1 个答案:

答案 0 :(得分:4)

您的示例代码未在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)