【发布时间】:2012-10-04 16:16:35
【问题描述】:
这里有一个奇怪的错误。这仅在 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 的应用中发现了这个问题,以满足广告和商品销售的最后期限,如果我的代码有问题 - 我需要尽快修复并重新提交。
【问题讨论】:
标签: ios 3g internet-connection cfnetworking