这似乎是基本的,但我似乎找不到任何指引我的正确方向。
在我的应用程序中,我有以下代码来访问CloudKit记录:
db.performQuery(query, inZoneWithID: nil) {(results, error) -> Void in
if error != nil {
print("performQuery error on query:\n\(error?.description)")
}
else {
for rec in results! {
// handle the record
}
}
}这是可行的,但有时我会出错;例如:
<CKError 0x155cfaa0: \"Request Rate Limited\" (7/2008); Retry after 1.9 seconds>我理解为什么会出现错误,但我不知道如何访问CKError对象,该对象具有等待和重试操作所需的信息--在本例中-- 1.9秒(或消息中显示的任何内容)之后。闭包中的“错误”是一个NSError。
如何访问CKError记录并检索该记录的CkErrorCode和retryAfter属性,以便能够优雅地处理重试?
抱歉,如果这看上去很简单,但我肯定没有找到任何解释的理由。
发布于 2016-01-10 03:34:02
您应该检查userInfo字典的NSError。
if let retryAfterValue = error.userInfo[CKErrorRetryAfterKey] as? NSTimeInterval {
let retryAfterDate = NSDate(timeIntervalSinceNow: retryAfterValue)
// ...
}发布于 2016-10-18 10:03:56
通过转换为CKError并访问它的成员:
db.performQuery(query, inZoneWithID: nil) {(results, error) -> Void in
guard error == nil else
{
let ckError = error as!CKError
if let retryAfter = ckError.retryAfterSeconds, retryAfter>0.0
{
let retryAfterDate = DispatchTime.now() + ckError.retryAfterSeconds!
// redo the query
return
}
// handle other errors
return
}
// handle the record
}https://stackoverflow.com/questions/34700889
复制相似问题