2013-11-01 8 views
5

インターネットでBECOMESが利用可能になったときに通知を受信することは可能ですか?私は到達可能性とあらゆる種類のものを認識しています。しかし、私が望むのは、デバイス上でインターネットが利用可能になると、保留中のNSUrlConnectionsを開始することです。到達可能性を常にチェックするループスレッドを使用したくないので、これを行う簡単な方法はありますか?助言がありますか?インターネットがiOSで利用可能になったときの通知

+2

到達可能性を使用してReachabilityChangedNotification Sに登録すると、動作しませんなぜ私は理解していません。 Reachabilityが提供していないものを探していますか? – Alex

+1

[Reachability](https://developer.apple.com/Library/ios/samplecode/Reachability/Introduction/Intro.html)は別の見方をする価値があります。ループしてはいけませんが、そのコードサンプルのように 'startNotifier'を呼び出すと、インターネット接続が変わったときに通知が届きます。 – Rob

+0

私はこの質問が重複していることに同意しません。提供される回答はReachabilityを使用することですが、質問は接続状態の更新を取得することです。私の答えで書いたように、Reachabilityは何も保証しません、それはヘルパーのようなものです。 Reachabilityが正しい答えであることを誰にも示唆すると、アプリケーションで未解決の状態につながる可能性があります。 –

答えて

2

[OK]を、ここに到達可能性について非常に素晴らしいポストは次のとおりです。http://www.mikeash.com/pyblog/friday-qa-2013-06-14-reachability.htmlは(以下のコメントをチェック!)
Tldr:あなたの接続が帰ってきたとき、あなたはブロックを発射することができますが、このソリューションは完璧ではありません。これを行うには100%信頼できる方法はありませんが(ループを試行する場合を除く)、これらのアプローチを組み合わせることができます。

編集:Jonah.at.GoDaddy答え@にコメント:
到達可能性をあなたに両方の接続通知エラーを与えることができます:偽陽性と偽陰性を(あなたがWWDC 2011のセッションでそれを確認することができ、私は1つ覚えていません。ネットワーキングについては2つあります)。だから、私の要点は、あなたはそれらの通知だけに頼るべきではないということです。あなたはステータス変更時にリフレッシュをトリガすることができますが、別の方法(ユーザーのやりとりや何らかのアクティブな待機)が必要です。ここで

0

は、あなたが必要とするよりも、もう少しかもしれ...私が使用するいくつかのコードです:あなたの質問から

-(void)checkNetworkStatus 
{ 
    // check for internet connection 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

    // check if a pathway to a random host exists 
    self.hostReachable = [Reachability reachabilityWithHostname:@"google.com"]; 
    [self.hostReachable startNotifier]; 
} 


-(void) checkNetworkStatus:(NSNotification *)notice 
{ 
    NetworkStatus hostStatus = [self.hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      DDLogInfo(@"A gateway to the host server is down."); 
      if(self.canReachGoogle) 
      { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle: LOCALIZED_NoInternetConnection 
                  message: LOCALIZED_ConnectionNeeded 
                  delegate:self cancelButtonTitle:LOCALIZED_Ok otherButtonTitles:nil]; 
       [alert show]; 
      } 
      self.canReachGoogle = NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      DDLogInfo(@"A gateway to the host server is working via WIFI."); 
      self.canReachGoogle = YES; 

      break; 
     } 
     case ReachableViaWWAN: 
     { 
      DDLogInfo(@"A gateway to the host server is working via WWAN."); 
      self.canReachGoogle = YES; 

      break; 
     } 
    } 
    DDLogInfo(@"Network connection has changed and is now: %@", self.canReachGoogle ? @"enabled" : @"disabled"); 
} 
+0

ええ、それはGoogleに依存しています。最高のアプローチではありません。また、私は到達可能性の変化を求めました。 – user2387149

関連する問題