2012-02-01 8 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]; 
} 

私はこのしばらく使用してきたが、取り扱いを希望していますアプリ内での些細な方法での到達可能性例えば、ネットワークが利用できないときにキャッシュされたデータを使用する。

第1の問題は、アプリがフォアグラウンドに入ってから約10秒後に状態の変化の通知が届かないことと、アプリがフォアグラウンドに再入場したときに手動でチェックすることです)が正しくない結果を返します。私は、

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

と、

hostReach = [[Reachability reachabilityForInternetConnection] retain]; 

を両方を試してみました。これは、ときアプリ前回の実行ネットワークが到達不能だった場合ということを意味

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! 

、コンソールからこの例のログを参照してください。アプリケーションがネットワーク接続で再度実行されると、回復効率が低下する可能性があります。

この遅延は避けられませんか?

私の他の問題は、私のアプリケーションが明らかにこれらの通知を受信しないことがあります。これは私のアプリがしばらくバックグラウンドにいたときに起こると思われますが、私は自由にこれを再現することはできません。

しかし、私は戻ってアプリに来たときに、時には、それが受け取った最後の通知は、ネットワークが到達不能だったということでした、そして、それは明らかにそのようなものを見た他の

誰でも:-(ネットワーク到達可能な通知を見たことがない?

感謝。

答えて

0

別のスレッドでupdateConnectionStatusを呼び出して、自分の質問に答えるために、問題を修正しているようだ(より確実に正しいステータスを返すように見える)、正直に言うけれども、私がなぜわかりません。

遅延通知は迷惑です。