CFNetDiagnosticCopyNetworkStatusPassively中可能存在的错误?仅通过3G / 4G返回kCFNetDiagnosticConnectionDown。

时间:2012-10-04 16:16:35

标签: ios 3g internet-connection cfnetworking

这里有一个奇怪的错误。这仅在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并下载网页 - 因此设备或网络没有错误。

CFNetDiagnosticCopyNetworkStatusPassively的呼叫仅在3G / 4G上失败。

有什么想法吗?

刚刚在我最近加入App Store以满足广告和推销截止日期的应用程序中发现了这一点,如果我的代码出现问题 - 我需要修复并尽快重新提交。

2 个答案:

答案 0 :(得分:4)

Apple确认错误。

如果你想要Dupe:错误ID#12443370

答案 1 :(得分:1)

您可以使用它来检查连接

How to check for an active Internet connection on iOS or OSX?

同步版的cannyboyn答案: 在https://github.com/tonymillion/Reachability

中获取Reachability.h和Reachability.m
#import "Reachability.h"

- (BOOL)connected 
{
    Reachability *reachability = [Reachability reachabilityForInternetConnection];  
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable);
}