2011-11-11 3 views
7

나는 현재이 사용 viewDidLoad에 네트워크 연결을 확인하고 있습니다 :도달 가능성을 가진 네트워크의 변화를 감지하는 방법은 무엇입니까?

-(BOOL)reachable { 
    ReachabilityDRC *r = [ReachabilityDRC reachabilityWithHostName:@"google.com"]; 
    NetworkStatus internetStatus = [r currentReachabilityStatus]; 
    if(internetStatus == NotReachable) { 
     return NO; 
    } 
    return YES; 
} 

을하지만도 무선 랜이 삭제 같은 네트워크의 변경, 또는 와이파이가 다시 경우 통지 할, 그래서 나는 할 수있다 그에 따라 변경됩니다.

그런 방법으로 내 방법을 조정할 수 있습니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/784582/easiest-way-to-determine-whether-iphone-internet-connection-is-available – 0x8badf00d

답변

6

또 다른 가능한 해결책은 "애플리케이션 didfinishlaunching"에 NS 알림을 추가하는 것입니다 : 내가 도달 가능성에 우수한 확장을 사용했습니다

Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    [reachability startNotifier]; 

    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

    if(remoteHostStatus == NotReachable) { 
     //Do something 
    } 
    else if (remoteHostStatus == ReachableViaWiFi) { 
    // Do something 
} 
    else{ 

// Else do something else 
} 
+1

의도 한대로 작동하지 않습니다. 도달 가능성 초기화 및 startNotifier는 appDidFinishLaunching으로 이동해야합니다. startNotifier가 없으면 checkForReachability가 호출되지 않기 때문입니다. –

0

:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkForReachability) name:kReachabilityChangedNotification object:nil]; 

및 checkForReachability 방법으로이 작업을 수행 Donoho Design Group이 만든 수업입니다. 네트워크 상태가 변경 될 때 경고를받을 수있는 알림이 있습니다.

http://blog.ddg.com/?p=24

행운

9

1 프로젝트에 SystemConfiguration.framework를 추가 할 수 있습니다. GitHub

Reachability.h 
Reachability.m 

3에서

2 개 다운로드 다음 파일 변수 Reachability* internetReachable;YourViewController.h에 추가

4- YourViewController.h

#import <UIKit/UIKit.h> 

@class Reachability; 

5에 @class Reachability;를 추가 프로젝트에서 이러한 파일을 추가

#import <UIKit/UIKit.h> 

@class Reachability; 

@interface YourViewController : UIViewController { 
    Reachability* internetReachable; 
} 

6 이제까지 이제 -(void)viewDidLoad

-(void) checkNetworkStatus:(NSNotification *)notice 
{ 
    // called after network status changes 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
     case NotReachable: 
     { 
      NSLog(@"The internet is down."); 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSLog(@"The internet is working via WIFI."); 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      NSLog(@"The internet is working via WWAN."); 
      break; 
     } 
    } 
} 

후 기능 다음 YourViewController.m

-(void)ViewDidLoad { 
    [[NSNotificationCenter defaultCenter] 
         addObserver:self 
         selector:@selector(checkNetworkStatus:) 
         name:kReachabilityChangedNotification 
         object:nil]; 

    internetReachable = [Reachability reachabilityForInternetConnection]; 
    [internetReachable startNotifier]; 
} 

8 추가에 -(void)ViewDidLoad에서 YourViewController.m

#import "YourViewController.h" 
#import "Reachability.h" 

7- 추가 다음 줄에 Reachability.h 추가 y 인터넷 연결 변경으로 콘솔에 로그인 할 수 있습니다.

+1

@ 살림, 매력처럼 Woking .... 감사합니다 남자 –

관련 문제