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 );

返回一个 long 等价于:

kCFNetDiagnosticConnectionDown

因此,我的测试失败了,我向用户显示警告 UIAlertView。

但是网络是有的!如果我将测试行更改为:

if ( ( status == kCFNetDiagnosticConnectionUp ) || ( status == kCFNetDiagnosticConnectionDown ) )

它在 3G/4G 上运行并下载网页 - 因此设备或网络没有故障。

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

有任何想法吗?

这刚刚在我最近加急进入 App Store 的应用程序中发现,以满足广告和商品销售的最后期限,如果我的代码有错误 - 我需要尽快修复并重新提交。

4

2 回答 2

4

Apple确认的错误。

如果你愿意,可以复制:错误 ID# 12443370

于 2012-10-08T18:49:50.977 回答
1

您可以使用它来检查连接

如何在 iOS 或 OSX 上检查活动的 Internet 连接?.

同步版本的 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);
}
于 2012-10-19T10:06:55.687 回答