iphone – CFStream:用户友好的错误

我需要连接到远程主机并使用某种二进制协议交换数据.我正在联系:

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"whatever.host.com", 
           port, &readStream, &writeStream);

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

>在我的流的委托中处理NSStreamEventErrorOccurred
>使用Error = [stream streamError]检索错误;
>尝试使用[the localized localizedDescription]获取用户友好的错误文本.

这是问题所在:而不是很好的错误消息,比如’未找到主机’,我得到“操作无法完成.(NSUnknownErrorDomain error 8.)”
或者,当设备处于飞行模式时,我得到“操作无法完成.(kCFErrorDomainCFNetwork error 2.)”

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

最佳答案 Apple没有提供有关iOS错误情况的正确说明.这不是您的代码或他们的错误 – 这些字符串根本不存在于iOS设备上.

为了提供更有趣的错误信息,您需要检查CFError和NSError对象的域和代码并返回一些内容. Apple网站上提供了kCFErrorDomainCFNetwork的错误说明列表here.像这样的代码会有所帮助 – 在构建错误演示UI时调用它:

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返回的字符串,即“操作无法完成.[…]”

点赞