2011-09-19 39 views
4

就像我喜歡ASIHTTPRequest一樣,它沒有記錄任何地方如何使用修改後的Reachability類,我也無法在stackoverflow或任何示例項目上找到它。ASIHTTPRequest可達性如何

目前即時通訊在這一點上:

Reachability *reach = [Reachability reachabilityWithHostName:@"http://google.com"]; 
[reach startNotifier]; 

if ([reach isReachable]) { 
    NSLog(@"connection"); 
}else{ 
    NSLog(@"no connection"); 
} 

似乎這不工作。

+0

'Reachability'最初,是由蘋果在他們的示例代碼提供了一個類,它是相當有據可查我的想法。它可以在這裏找到:http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html –

回答

6

您需要設立這樣的通知處理程序:

Reachability *reach = [Reachability reachabilityWithHostName:@"http://google.com"]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(reachabilityChanged:) 
              name:kReachabilityChangedNotification 
              object:nil]; 
[reach startNotifier]; 

然後,實施像這樣的處理程序:

- (void) reachabilityChanged:(Reachability *) reach { 
    if ([reach isReachable]) { 
     NSLog(@"connection"); 
    } else{ 
     NSLog(@"no connection"); 
    } 
} 

此外,當你不需要知道什麼時候事情的變化,刪除自己作爲觀察員:

[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil]; 

+0

reachabilityChanged沒有被調用時,實際上是可以改變。 – MaikelS

+1

@MaikelS這可能是因爲「達到」是零。做到這一點: '可達*到達= [[可達reachabilityWithHostName:@「google.com」]保留];' 和dealloc中或適當位置 – Tim

1
- (void) reachabilityChanged:(NSNotification *)notification 
{ 
    Reachability *localReachability = [notification object]; 


    if ([localReachability isReachable]) 

    { 
     NSLog(@"connection"); 
    } else{ 
     NSLog(@"no connection"); 
    } 

}

,請那麼這些變化的代碼會工作就像一個魅力:)

+0

添加釋放其不適合我 –

+0

工作其實,這是正確的處理程序。如果使用ARC,請添加一個屬性以保持活動狀態。 – NSDeveloper