修改 CKRecords 时出现 CloudKit 错误:“Zone Busy”

Posted

技术标签:

【中文标题】修改 CKRecords 时出现 CloudKit 错误:“Zone Busy”【英文标题】:CloudKit Error when modifying CKRecords: "Zone Busy" 【发布时间】:2015-05-13 19:58:27 【问题描述】:

这是我正在修改用户私有 CloudKit DB 上的一些记录的代码的 sn-p。

    let op = CKModifyRecordsOperation(recordsToSave: recordsToModify, recordIDsToDelete: [])
    op.savePolicy = CKRecordSavePolicy.ChangedKeys
    op.modifyRecordsCompletionBlock =  saved, deleted, err in
        println("modified all ... \(saved.count) w err '\(err)' \(err != nil ? err.userInfo : [:])")
    
    self.privateDB.addOperation(op)

通常这很好用:

 modified all ... 284 w err 'nil' Optional([:])

但我时不时会得到以下输出:

 modified all ... 0 w err '<CKError 0x7f9210e92840:"Zone Busy" (23/2029);
    "Zone busy">' Optional([NSDebugDescription: CKInternalErrorDomain: 2029,
    NSLocalizedDescription: Zone busy, NSUnderlyingError: <CKError 0x7f9210ea7dd0:
    "Unknown Error" (2029)>])

我假设这是 CloudKit 方面的某种小问题 - 但我如何检测到这一点?我该如何处理?

【问题讨论】:

【参考方案1】:

此错误表示您的请求正常,但云服务器已超载处理请求。您应该等待一段时间后再次尝试该操作。 WWDC 2014 视频 231 - Advanced CloudKit 的结尾也提到了这一点。

可以在此处找到一些其他信息:CloudKit Framework Constants Reference

【讨论】:

优秀的答案。谢谢! 我偶尔会收到 Zone Busy 错误。但它 - 似乎 - 交易仍在进行,无需我重试!有谁知道这是否可能? @GregMaletic 确保您只发送一笔交易。您可能同时发送多个交易。这解释了为什么它第一次通过而您第二次收到错误。

以上是关于修改 CKRecords 时出现 CloudKit 错误:“Zone Busy”的主要内容,如果未能解决你的问题,请参考以下文章

将 CloudKit 记录保存到本地文件保存除 CKAsset 之外的所有字段

CloudKit-更新记录:使用“saveRecord”更新记录时出现“客户端 oplock 错误”

从模拟器查询公共数据库时出现 Cloudkit 错误

获取特定类型的所有 CKRecords

CloudKit 修改现有的 CKSubscription

Cloudkit:CKDatabaseOperation 不适用于蜂窝网络