Ios 处理CloudKit错误和CKError
这似乎是基本的,但我似乎找不到任何指引我正确方向的东西 在我的应用程序中,我使用以下代码访问CloudKit记录:Ios 处理CloudKit错误和CKError,ios,cloudkit,Ios,Cloudkit,这似乎是基本的,但我似乎找不到任何指引我正确方向的东西 在我的应用程序中,我使用以下代码访问CloudKit记录: db.performQuery(query, inZoneWithID: nil) {(results, error) -> Void in if error != nil { print("performQuery error on query:\n\(error?.description)") } else { for re
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秒(本例中为1.9秒)后重试操作(或消息中显示的任何内容)。闭包中的“错误”是一个N错误
如何访问CKError记录并检索该记录的CkErrorCode和retryAfter属性,以便能够正常地处理重试
如果这看起来很简单,很抱歉,但我肯定没有找到任何解释。您应该查看NSError的userInfo字典
if let retryAfterValue = error.userInfo[CKErrorRetryAfterKey] as? NSTimeInterval {
let retryAfterDate = NSDate(timeIntervalSinceNow: retryAfterValue)
// ...
}
您应该检查NSError的userInfo字典
if let retryAfterValue = error.userInfo[CKErrorRetryAfterKey] as? NSTimeInterval {
let retryAfterDate = NSDate(timeIntervalSinceNow: retryAfterValue)
// ...
}
通过转换为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
}
通过转换为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
}
我知道这很简单!谢谢你快速的回答和正确的答案。我知道这很简单!感谢您的快速回复和正确答案。