首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFStream:对用户友好的错误

CFStream:对用户友好的错误
EN

Stack Overflow用户
提问于 2010-08-29 22:02:15
回答 3查看 1.5K关注 0票数 4

我需要连接到远程主机,并与一些二进制协议交换数据。我正在联系:

代码语言:javascript
复制
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"whatever.host.com", 
           port, &readStream, &writeStream);

一切都很好,除了错误处理。我

  1. 在流的委托中处理NSStreamEventErrorOccurred
  2. theError = [stream streamError];检索错误
  3. 尝试用[theError localizedDescription]获取用户友好的错误文本。

下面是问题:而不是很好的错误消息,比如“没有找到主机”,我得到了"Operation could not be completed. (NSUnknownErrorDomain error 8.)"

或者,当设备处于飞机模式时,我得到"The operation couldn’t be completed. (kCFErrorDomainCFNetwork error 2.)"

问题:如何获得套接字连接,在那里可以检索正确的错误消息?当我使用NSURLConnection (在另一个应用程序中)时,错误信息非常友好,所以我想得到类似的信息。

EN

回答 3

Stack Overflow用户

发布于 2010-09-09 05:20:57

苹果还没有对iOS上的错误情况提供适当的描述。这不是您的代码或他们的代码中的错误--字符串根本不存在于iOS设备上。

为了提供更有趣的错误信息,您需要检查CFErrorNSError对象的域和代码,并返回一些内容。来自kCFErrorDomainCFNetwork的错误描述列表可以在苹果的网站上找到这里。这样的代码将有助于--在构建错误表示UI时调用它:

代码语言:javascript
复制
NSString *GetUsefulErrorDescription(NSError *e) {
    NSString *codeString = [NSString stringWithFormat: @"%li", (long)[e code]];
    NSString *localized = NSLocalizedStringInTable(codeString, [e domain], nil);
    if (!localized || [localized isEqual: codeString])
        return [e localizedDescription];
    else
        return localized;
}

这在名为"kCFErrorDomainCFNetwork.strings“的应用程序包中查找"100”之类的字符串(对于kCFSOCKSErrorUnknownClientVersion,您可以将其值作为“SOCKS服务器拒绝访问,因为它不支持与请求的SOCKS版本的连接”)。如果没有这样的错误描述可用,它将使用NSError返回的字符串,即“操作无法完成……”。

票数 2
EN

Stack Overflow用户

发布于 2010-09-08 23:02:06

我认为本地化错误描述的设置必须在框架级别进行。换句话说,基金会框架开发人员提供了更多有用的消息,并让本地化人员翻译它们等等。从您的描述来看,CoreFoundation层在这方面没有得到足够的重视。

是否有您可以在这里使用的基金会API?

票数 1
EN

Stack Overflow用户

发布于 2010-09-04 19:00:49

您不认为只捕捉错误、检查错误类型并显示自定义错误消息更容易吗?也许我比重写代码更容易,仅仅是为了写好消息。奖励:这样你就有了完全的控制,如果你想要的话,你可以添加更长的描述。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3596789

复制
相关文章

相似问题

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