首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析CloudKit错误(CKError)

解析CloudKit错误(CKError)
EN

Stack Overflow用户
提问于 2018-07-05 15:41:06
回答 1查看 477关注 0票数 3

我正在使用CloudKit,并且正在检查是否已经创建了特定的区域。

对于这个例子,假设没有设置一个区域,所以CloudKit会检索一个CKError

CKError具有一个名为partialErrorsByItemID的属性,该属性的类型为[AnyHashable : Error]?

下面是代码:

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-05 16:36:08

_err中的键是CKRecordZoneID。一旦您有了它,就使用zoneName属性获取区域名称。

我将按以下方式编写您的代码:

代码语言:javascript
复制
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 {
            switch err {
            case CKError.partialFailure:
                if let _err = err.partialErrorsByItemID {
                    for key in _err.keys {
                        if let zone = key as? CKRecordZoneID {
                            let name = zone.zoneName
                            print("Missing zone: \(name)")
                        }
                    }

                    return
                }
            default:
                break
            }
        }
        print("dict:", dict)
    }
    privateDB.add(op)
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51195331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档