我正在使用Apple的Reachability
类来确定数据或wifi是否可用。但是,某个用户(使用美国iPhone)正在另一个国家/地区测试该应用,并且在尝试访问MapKit时看到以下错误。
安慰
在研究此错误时,我发现 PBRequester
是 ProtocolBuffer 。
2012-10-15 21:16:00.921 WrightsCS App [24239:907] PBRequester失败,错误消息错误域= kCFErrorDomainCFNetwork代码= -1018“国际漫游当前关闭。” UserInfo = 0x1e5587d0 {NSErrorFailingURLKey = https://gsp13-cn.ls.apple.com/shift,NSErrorFailingURLStringKey=https://gsp13-cn.ls.apple.com/shift,NSLocalizedDescription=国际漫游目前已关闭。}
例
-(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;
}
}
题
我们如何检测用户是否在漫游,或者至少确保如果用户偶然在漫游,我们不会遇到此错误?
最佳答案
好的-这不是答案,但可能会指出正确的方向。首先,我找不到似乎可以让您执行此操作的Objective C类(例如NSURLRequest
类)。
我认为您将需要直接进入CFNetwork框架(CFNetwork Framework Reference),因为查看CFNetworkError代码具有这些诱人的条目(与您的错误消息匹配):
kCFURLErrorNotConnectedToInternet = -1009,
kCFURLErrorInternationalRoamingOff = -1018,
kCFURLErrorDataNotAllowed = -1020,
不幸的是,我不了解CFNetwork框架,尽管查看了Apple文档,但我对哪个CFNetwork Framework API使用这些值并不明智。但是我相信会有办法。
我的两个“想法”(我经常用这个词):
CFHost
(并获取回调以查询错误代码)CFNetDiagnosticCopyNetworkStatusPassively
(并解析返回的字符串)。 如果有专家在场,我很乐意看到真正的答案。