2013-07-05 6 views
1

iPAD 3 WiFi + Cellular의 도달 가능성 (네트워크 가용성)을 확인하는 동안 아래에서 언급 한 시나리오에서 이상한 문제가 발생했습니다.WWAN에 대한 잘못된 응답 - 도달 가능성

  • 네트워크 가용성을 확인하기 위해 나는 Apple sample code for reachability을 (를) 사용하셨습니다.
  • 다음 코드는 WiFi 또는 WWAN의 가용성을 확인하기 위해 구현되었습니다. 아이 패드 &에서 NO SIM 없었다 시나리오에서
    - (BOOL)networkCheck 
    { 
        Reachability *wifiReach = [Reachability reachabilityForInternetConnection]; 
        NetworkStatus netStatus = [wifiReach currentReachabilityStatus]; 
    
        switch (netStatus) 
        { 
         case NotReachable: 
         { 
          NSLog(@"%@",@"NETWORKCHECK: Not Connected");  
          return false; 
          break; 
         } 
         case ReachableViaWiFi: 
         { 
          NSLog(@"%@",@"NETWORKCHECK: Connected Via WiFi");  
          return true; 
          break; 
         } 
         case ReachableViaWWAN: 
         { 
          NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN"); 
          return true; 
          break; 
         } 
        } 
        return false; 
    } 
    

    `

    `

    도 노 WiFi 연결 존재하고, 상기 방법은 ReachableViaWWAN 케이스를 실행 어떤 SIM 또는 다른 WWAN 네트워크가 없기 때문에 은 완전히 잘못된입니다. 가 응답을 신뢰할 수있는 호스트 & 검사에 요청을 보내기 다음과 같이 & 제안 구현

이 문제를 해결을 극복하기 위해 (또는 내가 해킹을 말해야한다).

case ReachableViaWWAN: 
    { 
     NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN"); 
     NSData *responseData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"www.google.com"]] returningResponse:nil error:nil]; 
     if (responseData != nil) 
     { 
      return true; 
      break; 
     } 
     else 
     { 
      return false; 
      break; 
     } 

    } 

나는 쿼리의 몇 가지 있습니다

  1. 이 엉뚱한 소리로 들리 겠지만,하지만 그것은 NO SIM은 장치에 존재하지 않는 경우에도이 ReachableViaWWAN가의 하드웨어 또는 iOS에 뭔가 문제인가?
  2. 문제에 대해 (위에서 언급 한 해결 방법보다) 더 좋은 해결책이 있습니까?

답변

0

코드에 버그가 있는지 잘 모르겠지만 this을 사용하여 연결을 확인할 수 있습니다. 여기에서 question.

하고이 같은 방법을 만들 수 있습니다 체크 연결을위한

:

-(BOOL)connected 
    { 
    Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable); 
} 

하고 연결을 확인하여 원하는 목적지 단지

if (![self connected]) { 
//THERE IS NO WWAN OR WIFI connection 
}else{ 
// connected. 
} 

그것은 나를 위해 잘 작동합니다.