CFNetDiagnosticCopyNetworkStatusPassively中可能存在bug?仅在3G/4G下返回kCFNetDiagnosticConnectionDown。

3

这里有一个奇怪的错误。它只会在iOS设备独占3G/4G网络时出现,即如果使用WiFi,则没有错误,一切都可以正常工作。

- ( BOOL ) isInternetAccessAvailable
{
    CFNetDiagnosticRef diag;

    diag = CFNetDiagnosticCreateWithURL ( NULL, ( __bridge  CFURLRef )[NSURL URLWithString:@"www.apple.com"] );

    CFNetDiagnosticStatus status;

    status = CFNetDiagnosticCopyNetworkStatusPassively ( diag, NULL );

    CFRelease ( diag );

    if ( status == kCFNetDiagnosticConnectionUp )
    {
        return YES;
    }
    else
    {
        NSString * title   = @"No Internet Connection";
        NSString * message = @"Please ensure you have an Internet Connection.";

        [self showAlertWithTitle:title andMessage:message];

        return NO;
    }
}

好的,我有一个以上的方法,在我尝试将数据加载到UIWebView之前被调用。

就像我所说的 - 在WiFi网络上,这个方法完美地运行。

如果关闭WiFi(或不可用/未连接),设备使用SIM卡进行3G / 4G网络。

调用以下行:

status = CFNetDiagnosticCopyNetworkStatusPassively ( diag, NULL );

返回与以下相当的长整型:

kCFNetDiagnosticConnectionDown

因此,我的测试失败并向用户显示警告UIAlertView。但是网络是存在的!如果我将测试行更改为以下内容:
if ( ( status == kCFNetDiagnosticConnectionUp ) || ( status == kCFNetDiagnosticConnectionDown ) )

它可以在3G/4G上运行并下载网页 - 因此设备或网络没有问题。但是,对于3G/4G,调用CFNetDiagnosticCopyNetworkStatusPassively失败了。有什么想法吗?这刚刚在我最近加快进入应用商店以满足广告和销售期限的应用程序中发现,如果我的代码有错误 - 我需要立即修复并重新提交。
2个回答

4

苹果已确认此为bug。

如果您想复制,请使用Bug ID#12443370


你在哪里可以找到苹果确认的错误? - Anthone
真希望这里有一个指向错误的链接和/或“重复”的链接。 - Brian Colavito
据我所知,苹果仍未修复此漏洞。我尝试使用CFNetDiagnosticDiagnoseProblemInteractively而不是CFNetDiagnosticCopyNetworkStatusPassively,但状态仍然是kCFNetDiagnosticErr! - hamsternik

1

这不是重点-可达性(Reachability)是进行此检查的一种方法。重点是上面的代码在除6.0之外的所有iOS版本中都是完全有效的。这已被验证并作为错误记录在Apple中,按照他们的要求。 - iOSProgrammingIsFun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接