我使用Apple提供的示例代碼來監控可達性 - 但它仍然令我頭疼。順便說一句,我在iOS 5上運行。iOS可達性 - 緩慢和丟失通知的問題
// 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];
}
}
而且,
//Called by Reachability whenever status changes.
- (void) reachabilityChanged: (NSNotification *) note
{
NSLog (@"reachabilityChanged");
[self updateConnectionStatus];
}
不忘,
- (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];
這意味着,如果網絡是不可到達時,應用程序最後運行,一旦應用程序再次通過網絡連接運行,恢復效率可能會降低。
這個延遲是不可避免的嗎?
我的另一個問題是,我的應用顯然有時不會收到這些通知。這似乎發生在我的應用程序已經在後臺一段時間了 - 儘管我無法隨意重新創建它。
但有時,當我回來的應用程序,它收到的最後一份通知是,網絡是不可到達的,它顯然並沒有看到一個網絡可達的通知:-(
其他人看到這樣的事情?
感謝。