我正在使用Reachability
Apple 的类,用于确定数据或 wifi 是否可用。然而,一名用户(使用美国 iPhone)正在另一个国家/地区测试该应用程序,他在尝试访问 MapKit 时看到以下错误。
Console
在我对这个错误的研究中,我发现PBRequester
is 协议缓冲区.
2012-10-15 21:16:00.921 WrightsCS App[24239:907] PBRequester 失败,出现错误错误域=kCFErrorDomainCFNetwork Code=-1018“国际漫游当前已关闭。” UserInfo=0x1e5587d0 {NSErrorFailingURLKey=https://gsp13-cn.ls.apple.com/shift,NSErrorFailingURLStringKey=https://gsp13-cn.ls.apple.com/shift,NSLocalizedDescription=国际漫游当前已关闭。}
Example
-(BOOL)hasDataConnection
{
Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
if ( networkStatus == NotReachable )
{
return NO;
}
else
{
if ( ! [Reachability reachabilityWithHostName:@"www.google.com"] )
return NO;
return YES;
}
}
Question
我们如何检测用户是否正在漫游,或者至少确保用户在偶然漫游时不会遇到此错误?
好的 - 这不是一个答案,但可能会为您指明正确的方向。首先,我找不到一个 Objective C 类似乎可以让你这样做(例如NSURLRequest
Class).
我认为你需要直接进入 CFNetwork 框架(CFNetwork框架参考) http://developer.apple.com/library/ios/#Documentation/CFNetwork/Reference/CFNetwork_Framework/_index.html因为查看 CFNetworkError 代码有这些诱人的条目(与您的错误消息匹配):
kCFURLErrorNotConnectedToInternet = -1009,
kCFURLErrorInternationalRoamingOff = -1018,
kCFURLErrorDataNotAllowed = -1020,
不幸的是,我不了解 CFNetwork 框架,尽管查看了 Apple 文档,但我并不知道哪个 CFNetwork 框架 API 使用这些值。但我坚信一定会有办法。
我的两个“想法”(我宽松地使用这个词):
- Use
CFHost
(并获取回调来查询错误代码)
- Use
CFNetDiagnosticCopyNetworkStatusPassively
(并解析返回的字符串)。
如果有专家的话,我很想看到真正的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)