首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RequestRateLimited in CKQueryOperation

RequestRateLimited in CKQueryOperation
EN

Stack Overflow用户
提问于 2015-04-23 23:28:51
回答 1查看 348关注 0票数 2

如果一个CKQueryOperation返回一个RequestRateLimited错误,应该将相同的queryOperation添加到publicDatabase,还是应该根据所接收的游标创建一个新的queryOperation?如果发生RequestRateLimited错误,客户端是否接收游标?

@farktronix:

  • 您不应该接收新的查询游标
  • 您可以再次尝试相同的操作。

我是否很好地实现了它,因为我得到了一个错误(在模拟器中,在恶劣的互联网条件下)。

-NSOperationQueue addOperation::操作已完成,不能排队

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {

    // ..other things

    let qo = CKQueryOperation(query: query)
    let qcb: (CKQueryCursor!, NSError!) -> () = {cursor, error in

        if error == nil {

            //.. some code

        } else {

            if error.code == CKErrorCode.RequestRateLimited.rawValue {

                let retryAfter = error.userInfo![CKErrorRetryAfterKey] as! NSNumber

                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(retryAfter.doubleValue * Double(NSEC_PER_SEC))), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

                    publicDatabase.addOperation(qo) // <- HERE is it ok? I get an error
                })
            } else {

                // .. some other code
            }
        }
    }

    qo.queryCompletionBlock = qcb
    publicDatabase.addOperation(qo)

    // .. other things ..
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-24 17:19:56

如果收到CKErrorRequestRateLimited错误,则不应接收新的查询游标。

无论何时收到速率有限的错误,都可以在userInfo字典中指定的CKErrorRetryAfterKey键下指定的时间过后再重试相同的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29836127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档