2012-02-01 6 views
4

Apple에서 제공 한 샘플 코드를 사용하여 도달 가능성을 모니터링하고 있지만 여전히 두통을 유발합니다. iOS 5, btw에서 실행 중입니다. iOS 도달 가능성 - 느리고 누락 된 알림 문제

//Called by Reachability whenever status changes. 
- (void) reachabilityChanged: (NSNotification *) note 
{ 
NSLog (@"reachabilityChanged"); 

    [self updateConnectionStatus]; 
} 

잊고하지

// Initialise 

hostReach = [[Reachability reachabilityForInternetConnection] retain]; 

[hostReach startNotifier]; 

하고, 또한

-(void) updateConnectionStatus 
{ 
    // Check Internet connectivity 

    NetworkStatus netStatus = [hostReach currentReachabilityStatus]; 

    if(netStatus == NotReachable) 
    { 
     NSLog (@"updateConnectionStatus: network not reachable!"); 

     [self setNetworkAvailable:NO]; 
    } 
    else 
    { 
     NSLog (@"updateConnectionStatus: network reachable!"); 

     [self setNetworkAvailable:YES]; 
    } 
} 

하고,

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSLog (@"applicationWillEnterForeground"); 

    [self updateConnectionStatus]; 
} 

나는이 잠시 사용하고 있지만, 처리 걸려 앱 내에서 단순한 방식으로 도달 가능성 예를 들어 네트워크를 사용할 수없는 경우 캐시 된 데이터를 사용합니다.

첫 번째 문제는 앱이 포 그라운드로 들어간 후 약 10 초가 지나면 상태 변경 알림이 도착하지 않으며 위의 그림과 같이 앱이 포 그라운드로 다시 들어가면 수동 확인까지됩니다) 잘못된 결과를 반환합니다. 콘솔에서

나는 모두 시도
2012-02-01 13:31:02.566 myapp[9807:707] applicationWillEnterForeground 
2012-02-01 13:31:02.632 myapp[9807:707] Reachability Flag Status: -- ------- networkStatusForFlags 
2012-02-01 13:31:02.634 myapp[9807:707] updateConnectionStatus: network not reachable! 
2012-02-01 13:31:02.660 myapp[9807:707] reachabilityChanged 
2012-02-01 13:31:02.662 myapp[9807:707] Reachability Flag Status: WR t----l- networkStatusForFlags 
2012-02-01 13:31:02.663 myapp[9807:707] updateConnectionStatus: network reachable! 

,

hostReach = [[Reachability reachabilityWithHostName:@"www.apple.com"] retain]; 

하고,

hostReach = [[Reachability reachabilityForInternetConnection] retain]; 

이 의미를이 예제 로그를 참조하는 네트워크에 연결할 수 있다면 때 응용 프로그램 마지막 실행, 네트워크 연결로 앱이 다시 실행되면 복구가 덜 효율적입니다.

이 지연은 불가피한가요?

내 다른 문제는 내 앱이 때때로 이러한 알림을받지 못하는 것입니다. 이것은 내 애플 리케이션이 잠시 동안 배경에 있었을 때 일어날 것 같다 - 나는 이것을 의지대로 재현 할 수는 없지만. 나는 응용 프로그램에 돌아올 때

그러나 때때로, 그것은 마지막으로 수신 한 통지는 네트워크에 연결할 수 있었고, 그것은 분명히

다른 사람이 그런 건 본 :-(네트워크에 연결할 알림을보고 결코했다?

감사합니다.

답변

0

는 별도의 스레드에 updateConnectionStatus를 호출, 내 자신의 질문에 대답하기 위해 문제를 해결 한 것으로 보인다 정직하게하지만, 내가 왜 모르겠어요, (그것보다 확실하게 올바른 상태를 반환하는 것) .

지연된 알림은 여전히 ​​불편을줍니다.

관련 문제