我需要连接到远程主机,并与一些二进制协议交换数据。我正在联系:
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"whatever.host.com",
port, &readStream, &writeStream);一切都很好,除了错误处理。我
NSStreamEventErrorOccurredtheError = [stream streamError];检索错误[theError localizedDescription]获取用户友好的错误文本。下面是问题:而不是很好的错误消息,比如“没有找到主机”,我得到了"Operation could not be completed. (NSUnknownErrorDomain error 8.)"
或者,当设备处于飞机模式时,我得到"The operation couldn’t be completed. (kCFErrorDomainCFNetwork error 2.)"
问题:如何获得套接字连接,在那里可以检索正确的错误消息?当我使用NSURLConnection (在另一个应用程序中)时,错误信息非常友好,所以我想得到类似的信息。
发布于 2010-09-09 05:20:57
苹果还没有对iOS上的错误情况提供适当的描述。这不是您的代码或他们的代码中的错误--字符串根本不存在于iOS设备上。
为了提供更有趣的错误信息,您需要检查CFError和NSError对象的域和代码,并返回一些内容。来自kCFErrorDomainCFNetwork的错误描述列表可以在苹果的网站上找到这里。这样的代码将有助于--在构建错误表示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返回的字符串,即“操作无法完成……”。
发布于 2010-09-08 23:02:06
我认为本地化错误描述的设置必须在框架级别进行。换句话说,基金会框架开发人员提供了更多有用的消息,并让本地化人员翻译它们等等。从您的描述来看,CoreFoundation层在这方面没有得到足够的重视。
是否有您可以在这里使用的基金会API?
发布于 2010-09-04 19:00:49
您不认为只捕捉错误、检查错误类型并显示自定义错误消息更容易吗?也许我比重写代码更容易,仅仅是为了写好消息。奖励:这样你就有了完全的控制,如果你想要的话,你可以添加更长的描述。
https://stackoverflow.com/questions/3596789
复制相似问题