【问题标题】:Is there some way to get a string description of CFStreamError?有没有办法获得 CFStreamError 的字符串描述?
【发布时间】:2014-04-15 21:14:04
【问题描述】:

我正在使用一个 API,它给了我一个 CFStreamError(据说它已被弃用,但 Apple 自己显然不在乎。)

我知道一些值,我当然可以编写多个嵌套的 switch 语句来将我知道的所有值转换为字符串,但是会有一些我不知道的值。

难道没有一些方便的方法可以输出错误消息吗?我不在乎它是否已本地化,因为无论如何它只会出现在我们的日志中。

【问题讨论】:

    标签: macos cocoa cfnetwork cfstream


    【解决方案1】:

    NSError 之前的“旧”处理错误的方式通常涉及返回代码,这些代码应该由应用程序(即开发人员)在内部使用,而不是呈现给用户。

    对于较新的 API,返回的 NSError 实际上包含要呈现给用户的信息(如果合适)。

    CFStreamError-
    CocoaDev 上有一个关于使 CFStreamError 可读的条目:

    http://cocoadev.com/CFStreamErrorCodes

    基本上它涉及手动检查来自CFStream Error Domain Constants 的各种错误域。

    有关开发者技术支持的更多信息,请访问 Macnetworkprog 邮件列表上的this post

    【讨论】:

    • 这就是我所担心的......所以基本上要从中得到一个字符串,我还必须添加嵌套的 switch 语句,这些语句遍历每个标头中的每个错误代码并返回一个不同的字符串.. . 这对这个项目来说工作量太大了,所以我可能只返回通用的“域 X,错误 X”字符串。 ://
    • 在大多数情况下,即使知道确切的错误消息,用户也无法自行解决问题 - 假设是中等熟练的 Mac 用户,而不是网络管理员的目标受众
    • 我想您还会说我们的支持人员也不应该看到错误消息?或者他们应该浪费时间从分布在多个文件的大量错误消息列表中查找它? ://
    • 嗯,这完全取决于您的用例 - 支持是否能够提出具体的方法来解决信息可能有价值并且应该包含在内的问题。
    • 添加了另一个有用的帖子(不过看起来需要更多的手动工作来获得人类可读的错误)
    【解决方案2】:

    这适用于 POSIX 域错误:

                if (err.domain == kCFStreamErrorDomainPOSIX) {
                    DLog("POSIX err: %s", strerror(err.error));
                } else {
                    DLog("domain: %d, value: %d", err.domain, err.error);
                }
    

    例如:

    2020-01-31 09:58:02.996603-0800 废话 CFWriteStreamCB(CFWriteStreamRef _Null_unspecified, CFStreamEventType, void * _Null_unspecified):26 POSIX err: Operation timed out

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多