2014-10-31 2 views
0

Я использую класс Reachability, который Apple предоставила и столкнулась с одной странной вещью. Приложение проверяет соединение каждый раз, когда приложение становится активным, и если оно активно, обновите некоторые данные. Когда я включаю режим самолета и сразу после этого перезапускаю приложение, значит didBecomeActive будет называться, достижимость возвращает неправильный статус (достижимый ViaWiFi). И если вы повторите это еще раз, вернется правильный статус.неправильный статус для достижимости в appDidBecomeActive

Также я заметил, что если вы вернетесь в режим самолета, подождите несколько секунд, а затем снова запустите приложение, достижимость вернет правильный статус.

Есть ли какие-либо объяснения такого поведения?

ответ

0

Вам нужно сделать более строгим при проверке на подключение. Добавьте еще условие, пока вы получаете уведомление об изменении доступности.

Проверьте ниже условий:

- (void)reachabilityDidChange:(NSNotification *)notification { 

    // Reachbility for internet 
    Reachability *reachability = (Reachability *)[notification object]; 
    NetworkStatus internetStatus = [reachability currentReachabilityStatus]; 

    switch (internetStatus) { 
     case NotReachable: 
     { 
      NSLog(@"The internet is down."); 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"The internet is working via WIFI."); 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"The internet is working via WWAN."); 
      break; 
     } 
    } 

    // Reachbility for host 
    Reachability *hostReachability = [Reachability reachabilityWithHostName:@"www.apple.com"]; 

    NetworkStatus hostStatus = [hostReachability currentReachabilityStatus]; 
    switch (hostStatus) { 
     case NotReachable: 
     { 
      NSLog(@"A gateway to the host server is down."); 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"A gateway to the host server is working via WIFI."); 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"A gateway to the host server is working via WWAN."); 
      break; 
     } 
    } 
} 
+0

Какая разница между первым и вторым оператором коммутатора? Оба, похоже, проверяют «[достижимость currentReachabilityStatus]» – sooper

+0

@sooper: Спасибо, человек :) Я пропустил эту точку там, отредактировал ответ. – Kampai

Смежные вопросы