CFNetDiagnosticsCopyNetworkStatusPassively中可能存在错误?仅通过3G/4G返回



这里有一个奇怪的错误。只有当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已关闭(或不可用/未连接),并且设备正在使用3G/4G网络的SIM卡。

is呼叫的线路:

status = CFNetDiagnosticCopyNetworkStatusPassively ( diag, NULL );

返回一个长等价值:

kCFNetDiagnosticConnectionDown

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

但网络就在那里!如果我将测试线更改为:

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

它可以通过3G/4G工作并下载网页,因此设备或网络没有故障。

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

有什么想法吗?

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

苹果确认了错误。

如果你想复制:Bug ID#1243370

您可以使用它来检查连接

如何在iOS或OSX上检查活动的互联网连接?。

cannyboyn回答同步版本:取可达性.h和可达性.mhttps://github.com/tonymillion/Reachability

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

相关内容

  • 没有找到相关文章

最新更新