2011-08-10 4 views
2

アプリケーションを構築していて、デバイスIPAddressに接続して、デバイスがネットワーク上でまだ使用可能かどうかを確認しようとしています。私はそれが利用可能であることを確認するために到達可能性を使用しています。ホストが削除されたときにiOS到達可能性が認識されない

iOSデバイスのネットワークアクセス(たとえば、飛行機モードをオンにする)はすべて正常に動作しますが、ネットワークからデバイスを削除すると、到達可能性に気付かないようです。

到達可能性が結果をキャッシュしていて、アップデートを見ていないようです。

+0

NSNotificationオブザーバーを確認してください。バックグラウンドに入ったり、フォアグラウンドに入ったりしている間に、削除されている場合。 –

+0

apple Reachabiltyサンプルクラスをチェックすることができます:https://developer.apple.com/library/content/samplecode/Reachability/Listings/Reachability_Reachability_h.html –

答えて

2

次に到達可能性を使用しないでください!

代わりに、このビットを使用して治療を行います。

NSString *connected = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; 
wait(25000); 
if (connected == NULL) { 

NSLog(@"Not Connected"); 
//Code to show if not connected 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Oops! You aren't connected to the Internet." 
delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 

} else { 
NSLog(@"Connected Successfully!"); 
//Any other code for successful connection 
} 
+0

Nathanと同じ問題が発生していました。あなたのソリューションは簡単ですが、いつでも動作します!私が追加したいのは、新しいstringWithContentsOfURL形式を使用することだけです。 NSError * error = nil; NSString * connected = [NSString stringWithContentsOfURL:[NSURL URLWithString:@ "http://twitter.com"]エンコーディング:NSASCIIStringEncodingエラー:&エラー]; – user523234

+2

私は結果が返るのを待つために25秒待つことを離れて滞在するでしょう。 – burtlo

2

SCReachability APIのみをチェックし、ローカルのハードウェアは、それが指定されたアドレスに達することができるように構成されている場合。それは実際にそれに到達しようとはしません。ターゲットが生きているかどうかを判断するには、ターゲットとの接続を開こうとする必要があります。

1

チェックアウトthis answer pixelbitの答えは実行可能ですが、burtloは25秒待つだけでいいのです。 NSURLConnectionを使用する方がはるかにクリーンです。

0

AppleはReachabiltyクラスファイルを更新しました。最新のXcodeでテストすることができます。 ここにリンクされています: Apple Reachabilty Sample Code

iPhone 6バージョン10.3.1でXcode 8.3.1でテストしました。 ネットワーク状態の変更をユーザーに通知します。

関連する問題