【发布时间】:2018-07-05 15:41:06
【问题描述】:
我正在使用 CloudKit,并且正在检查是否已经创建了特定区域。
对于这个例子,假设一个区域没有设置,所以 CloudKit 检索我一个CKError。
此CKError 有一个名为partialErrorsByItemID 的属性,其类型为[AnyHashable : Error]?
代码如下:
fileprivate func checkIfZonesWereCreated() {
let privateDB = CKContainer.default().privateCloudDatabase
let op = CKFetchRecordZonesOperation(recordZoneIDs: [zoneID1, zoneID2])
op.fetchRecordZonesCompletionBlock = { (dict, err) in
if let err = err as? CKError, let _err = err.partialErrorsByItemID {
print(_err)
/* prints
[AnyHashable(<CKRecordZoneID: 0x60800003cba0; ownerName=__defaultOwner__, zoneName=TestZone>): <CKError 0x60400005a760: "Zone Not Found" (26/2036); server message = "Zone 'TestZone' does not exist"; uuid = ...-2DF4E13F81E2; container ID = "iCloud.com.someContainer">]
*/
// If I iterate through the dictionary
_err.forEach({ (k, v) in
print("key:", k) // prints: key: <CKRecordZoneID: 0x60800002d9e0; ownerName=__defaultOwner__, zoneName=TestZone>
print("value:", v) // prints: value: <CKError 0x60400005a760: "Zone Not Found" (26/2036); server message = "Zone 'TestZone' does not exist"; uuid = ...-2DF4E13F81E2; container ID = "iCloud.com.someContainer
})
return
}
print("dict:", dict)
}
privateDB.add(op)
}
如何解析这个错误?我需要访问zoneName?
【问题讨论】:
-
用更多代码更新您的问题,显示您对 CloudKit 的调用以及您当前的错误处理。
-
@rmaddy 我尝试将
key转换为Dictionary<String, Any>,但它不起作用。如果是这样,我可以访问zoneName子键然后获取值 -
您可以尝试将
_err转换为[AnyHashable : Any],然后使用zoneID作为键来获取CKError值(将其转换为CKError)最后访问CKError.code( zone not found 的 CKError.code 原始值为 26)。
标签: ios swift cloudkit ckerror