2011-12-06 6 views
2

내 서버 IP와 함께 사용할 Apple의 도달 가능성 클래스가 수정되었습니다. 하지만 reachabilityWithAddress을 사용하면 앱을 실행하는 동안 reachabilityChanged이라고 부르지 않습니다. 인터넷 연결 상태가 변경된 경우에만 호출됩니다. (wi-fi를 껐다가 켜는 것과 같습니다.)하지만 reachabilityWithHostName을 사용하면 reachabilityChanged 앱이 시작될 때 함수가 호출됩니다.IP가있는 도달 가능성 클래스

무엇이 누락 되었습니까? 방법 그리고

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    /////////////////////////////////////////////////////////////////////////////////// 
    // Reachability Local Notifications 
    /////////////////////////////////////////////////////////////////////////////////// 
    hasInternetConnection = NO; 
    struct sockaddr_in address; 
    address.sin_len = sizeof(address); 
    address.sin_family = AF_INET; 
    address.sin_port = htons(80); 
    address.sin_addr.s_addr = inet_addr("X.X.X.X"); 
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name:kReachabilityChangedNotification object: nil]; 
    hostReach = [Reachability reachabilityWithAddress:&address]; 
    [hostReach startNotifier]; 

    ... 

} 

:

-(void)reachabilityChanged:(NSNotification*)note 
    { 
    Reachability* curReach = [note object]; 
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]); 
    if (curReach == hostReach) { 
     NetworkStatus netStatus = [curReach currentReachabilityStatus]; 
     if (netStatus != ReachableViaWiFi && netStatus != ReachableViaWWAN) { 
      hasInternetConnection = NO; 
     } 
     else { 
      hasInternetConnection = YES; 
     } 
    } 
    else { 
     DLog(@"Something go wrong!"); 
    } 
} 

답변

2

reachabilityWithHostName 사용 : 호스트 이름의 도달 가능성을 알 수없는 c를 그 이름이 될 때까지/B 도달 가능성을 초기화 한 후 즉시 알림을 선택을 해결됨. reachabilityWithAddress :의 경우 도달 가능성 상태가 이미 알려져 있으므로보고 할 변경 사항이 없습니다.

reachabilityWithAddress : 함수의 내부 "if"블록에 다음 세 줄을 추가하여 문제를 해결했습니다.

SCNetworkReachabilityFlags flags; 
SCNetworkReachabilityGetFlags(reachability, &flags); 
ReachabilityCallback(reachability, flags, retVal); 

도달 가능성이 실제로 변경된 경우 호출되는 동일한 콜백 함수를 호출합니다. 그래서 내가 마치 알림에 완전히 의존한다면 도달 가능성을 초기화 한 후에 알림이 게시됩니다.

관련 문제