2012-01-22 1 views
0

インターネット接続を確認する方法がありますが、方法は-(id):initの場合のみです。常に接続を確認するように設定することはできますか?メソッドを常時呼び出しています

- (id) checkConnected 
    { 

     NSError *error = nil; 
     NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSASCIIStringEncoding error:&error]; 
     if (URLString != NULL) 
      { 
       connected = YES; 
      } 
     else connected = NO; 

     if(connected == YES) 
      NSLog(@"Connected"); 
     else if (connected == NO) 
      NSLog(@"NotConnected"); 

     return self; 
    } 
+2

到達可能性を検討しましたか?自分自身を代理人として設定することができ、ユーザーのインターネット状態が –

+0

に少し変更された場合に更新されます。私はちょうどそれがこのメソッドで動作するかどうかを知りたがっています。 –

+0

http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html –

答えて

0

到達可能性は、他の人が示唆したように良い最初のパスの確認ですが、それが唯一のマイナスの場合は、テスト:それは不可能が接続を作ることです、それは助けている場合、ここでのコードはありますか?ファイアウォールがあなたをブロックしている、またはリモートサーバがダウンしている場合、または何千もの何かが起きた場合、到達可能性は、システムが原則的に到達可能である(つまり、ネットワークに接続でき、実際に到達可能ではありません。

一部のアプリケーションでは、あなたが求めていることは不合理ではありません。注意する必要があることは、一定のテストでメインスレッドをブロックしないことです。

​​

かわりに、接続が成功したときに実行されるいくつかのメインスレッドのコードを書くことができログインしている「接続が成功しました」:ここでは繰り返しバックグラウンドでテストを実行しますいくつかのコードです。私は*応答と*エラーをブロックの外側から渡しているので、ブロックの内側または外側のメインスレッドで(あなたがそれらを範囲内に保つと仮定して)あなたの使用のために利用できるようになります。

あなたは絞り込むことができます(つまり、while()は使用しないでください)。これは実装の詳細です。 Richardが提案したようにNSTimer()を使うとうまくいきます。

最後に、このコードを使用しても、後で接続する可能性のある障害を処理する必要があります。一度動作したという理由だけで、接続が1ミリ秒後に利用可能になるわけではありません。

関連する問題