gpt4 book ai didi

iphone - CFStream : User-friendly errors

转载 作者:行者123 更新时间:2023-12-03 19:20:11 27 4
gpt4 key购买 nike

我需要连接到远程主机并使用某种二进制协议(protocol)交换数据。我正在连接:

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

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

  1. 处理NSStreamEventErrorOccurred在我的流的委托(delegate)中
  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(在另一个应用程序中)时,错误消息很好且友好,所以我想得到类似的东西。

最佳答案

Apple 尚未对 iOS 上的错误情况提供正确的描述。这不是您或他们的代码中的错误 - iOS 设备上不存在这些字符串。

为了提供更有趣的错误信息,您需要检查 CFErrorNSError 对象的域和代码并返回一些内容。可以使用 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 返回的字符串,即“操作无法完成。[...]”

关于iphone - CFStream : User-friendly errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3596789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com