ios - CKError localizedDescription

标签 ios swift cloudkit nserror ckerror

目标

  • 我想向用户显示在应用程序中遇到的 CKError 作为警报。
  • 所以我想从可以显示给用户的错误中提取字符串。

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

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

代码:

以下是我所做的尝试:

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. 提取可以显示给用户的错误字符串的正确方法是什么?

最佳答案

看起来错误 UserInfo[NSUnderlyingError] 中还有另一个错误。尝试从该错误中获取 localizedDescription。

所以,那将是:

((error as? CKError)?.errorUserInfo[NSUnderlyingErrorKey] as? NSError)?.localizedDescription

关于ios - CKError localizedDescription,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856270/

相关文章:

ios - 将 UILabel 高度调整为文本

ios - 无法在初始加载时以编程方式设置 UINavigationItem 标题

ios - PFQueryTableViewController 删除单元格动画(Parse.com)

ios - 快速错误: UITableViewController has no member "function name"

ios - 希望我的应用程序只能在 iPhone 4 及更高版本上运行,而不能在其他设备上运行

swift - CloudKit公共(public)数据库删除记录

ios - com.apple.developer.icloud-container-identifiers 和 com.apple.developer.ubiquity-kvstore-identifier 之间的区别

ios - CloudKit 仅获取第一条记录

ios - 我可以在没有配置文件的情况下使用 jenkins 构建 iOS 项目吗?

ios - 确定以前安装的应用程序