ここで奇妙なバグが発生しました。これは、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を使用している場合。
が呼び出される行:
status = CFNetDiagnosticCopyNetworkStatusPassively ( diag, NULL );
次と同等のlongを返します。
kCFNetDiagnosticConnectionDown
したがって、テストは失敗し、ユーザーに警告UIAlertViewを表示します。
しかし、ネットワークはそこにあります!テストラインをこれに変更した場合:
if ( ( status == kCFNetDiagnosticConnectionUp ) || ( status == kCFNetDiagnosticConnectionDown ) )
3G / 4Gで動作し、Webページをダウンロードするため、デバイスやネットワークに障害はありません。
しかし、への呼び出しCFNetDiagnosticCopyNetworkStatusPassively
は3G/4Gでのみ失敗します。
何か案は?
これは、広告とマーチャンダイジングの締め切りに間に合わせるために最近App Storeに急いで行ったアプリで見つかったばかりです。コードに問題がある場合は、これを修正してできるだけ早く再送信する必要があります。