这看起来很元素,但无论如何我似乎无法找到引导我走向正确的方向。
在我的应用中,我有这段代码来访问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属性,以便我可以优雅地处理重试?
很抱歉,如果这看起来很元素,但我确定没有找到解释它的任何内容。
答案 0 :(得分:5)
您应该检查NSError的userInfo字典。
if let retryAfterValue = error.userInfo[CKErrorRetryAfterKey] as? NSTimeInterval {
let retryAfterDate = NSDate(timeIntervalSinceNow: retryAfterValue)
// ...
}
答案 1 :(得分:1)
转换为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
}