首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CKError localizedDescription

CKError localizedDescription
EN

Stack Overflow用户
提问于 2018-04-16 11:33:05
回答 3查看 1.1K关注 0票数 7

目标

  • 我想将遇到的CKError显示给应用程序中的用户作为警告。
  • 因此,我想从可以显示给用户的错误中提取字符串。

注意:这个问题与要显示的UI代码无关。只想从错误中提取有意义的字符串。

我尝试使用localizedDescription,但它似乎不包含适当的字符串

代码:

以下是我所作的尝试:

代码语言:javascript
复制
po error  
<CKError 0x1c464cea0: "Network Unavailable" (3/NSURLErrorDomain:-1009); "The Internet connection appears to be offline.">  

po error.localizedDescription  
"The operation couldn’t be completed. (CKErrorDomain error 3.)"  

po (error as! CKError).errorUserInfo  
▿ 2 elements  
  ▿ 0 : 2 elements  
    - key : "NSUnderlyingError"  
    - value : Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={NSErrorFailingURLStringKey=https:/  
  ▿ 1 : 2 elements  
    - key : "NSDebugDescription"  
    - value : NSURLErrorDomain: -1009  



po (error as? NSError)?.localizedFailureReason  
nil  

po (error as? NSError)?.localizedRecoverySuggestion  
nil  

po (error as? NSError)?.localizedRecoveryOptions  
nil  

po (error as? NSError)?.debugDescription  
▿ Optional<String>  
  - some : "<CKError 0x1c064eaf0: \"Network Unavailable\" (3/NSURLErrorDomain:-1009); \"The Internet connection appears to be offline.\">"  

问题:

调试描述似乎最接近我想要的。

  1. 我漏掉了什么吗?
  2. 提取我可以显示给用户的错误字符串的正确方法是什么?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-19 16:20:52

看来errorUserInfoNSUnderlyingError中还有另一个错误。尝试从该错误中获取localizedDescription。

因此,这将是:

代码语言:javascript
复制
((error as? CKError)?.errorUserInfo[NSUnderlyingErrorKey] as? NSError)?.localizedDescription
票数 6
EN

Stack Overflow用户

发布于 2018-04-19 17:01:01

error.localizedDescription实际上是您从错误本身中需要处理的全部内容。

您的应用程序可以提供更好的错误信息(更方便用户,本地化,等等)通过检查错误代码并向用户提供自己的消息。

代码语言:javascript
复制
(error as? NSError)?.code
票数 4
EN

Stack Overflow用户

发布于 2021-04-22 18:17:17

我并不以此为荣,但这正是我所诉诸的。一定有更好的办法!

代码语言:javascript
复制
public func ckErrorCodeToText(code: CKError.Code) -> String {
    switch code {
    case .alreadyShared: return "alreadyShared"
    case .internalError: return "internalError"
    case .partialFailure: return "partialFailure"
    case .networkUnavailable: return "networkUnavailable"
    case .networkFailure: return "networkFailure"
    case .badContainer: return "badContainer"
    case .serviceUnavailable: return "serviceUnavailable"
    case .requestRateLimited: return "requestRateLimited"
    case .missingEntitlement: return "missingEntitlement"
    case .notAuthenticated: return "notAuthenticated"
    case .permissionFailure: return "permissionFailure"
    case .unknownItem: return "unknownItem"
    case .invalidArguments: return "invalidArguments"
    case .resultsTruncated: return "resultsTruncated"
    case .serverRecordChanged: return "serverRecordChanged"
    case .serverRejectedRequest: return "serverRejectedRequest"
    case .assetFileNotFound: return "assetFileNotFound"
    case .assetFileModified: return "assetFileModified"
    case .incompatibleVersion: return "incompatibleVersion"
    case .constraintViolation: return "constraintViolation"
    case .operationCancelled: return "operationCancelled"
    case .changeTokenExpired: return "changeTokenExpired"
    case .batchRequestFailed: return "batchRequestFailed"
    case .zoneBusy: return "zoneBusy"
    case .badDatabase: return "badDatabase"
    case .quotaExceeded: return "quotaExceeded"
    case .zoneNotFound: return "zoneNotFound"
    case .limitExceeded: return "limitExceeded"
    case .userDeletedZone: return "userDeletedZone"
    case .tooManyParticipants: return "tooManyParticipants"
    case .referenceViolation: return "referenceViolation"
    case .managedAccountRestricted: return "managedAccountRestricted"
    case .participantMayNeedVerification: return "participantMayNeedVerification"
    case .serverResponseLost: return "serverResponseLost"
    case .assetNotAvailable: return "assetNotAvailable"
    @unknown default: return String(code.rawValue)
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49856270

复制
相关文章

相似问题

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