我正在使用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(并解析返回的字符串)。

  • 如果有专家在场,我很乐意看到真正的答案。

    10-08 11:16