2013-07-23 11 views
9

こんにちは、私は、ユーザーが、この私が追加したリンゴ到達可能性クラスのための私のアプリケーションでネットワーク接続を取得し、下記の私はappDelegateクラスdidFinishLaunchingWithOptionsメソッドで使用していますスニペットある時はいつでも、iOS Reachability Classからのネットワーク接続通知の変更方法

Reachability* reachability = [Reachability reachabilityForInternetConnection]; 
     [reachability startNotifier]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 

と私のreachabilityChangedセレクタをキャプチャしたいですこの方法は、

- (void)reachabilityChanged:(NSNotification*)notification 
{ 
    Reachability* reachability = notification.object; 
    if(reachability.currentReachabilityStatus == NotReachable) 
     NSLog(@"Internet off"); 
    else 
     NSLog(@"Internet on"); 
} 

以下の通りですが、私は私の機内モードをオフにしたとき、私は自分の携帯電話でのネットワーク接続を取得するときに、ここで私は、通知のいずれかの種類を取得しておりません。

何か不足していますか?

+0

これを確認してください。http://stackoverflow.com/a/10184617/1635315これは本当にあなたを助けるでしょう。 – iKT

答えて

6

私はブール

@property (nonatomic, assign) BOOL hasInet; 

.M

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self setUpRechability]; 
} 


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

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

    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

    if   (remoteHostStatus == NotReachable)  {NSLog(@"no");  self.hasInet-=NO; } 
    else if  (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); self.hasInet-=YES; } 
    else if  (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); self.hasInet-=YES; } 

} 

- (void) handleNetworkChange:(NSNotification *)notice 
{ 
    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

    if   (remoteHostStatus == NotReachable)  {NSLog(@"no");  self.hasInet-=NO; } 
    else if  (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); self.hasInet-=YES; } 
    else if  (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); self.hasInet-=YES; } 

// if (self.hasInet) { 
//  UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Net avail" message:@"" delegate:self cancelButtonTitle:OK_EN otherButtonTitles:nil, nil]; 
//  [alert show]; 
// } 
} 
13

前たぶん、あなたがオブザーバーを追加する必要がありますこのラッパーは、共同体に変更があった場合にブロックベースのコールバックを取得するための到達可能性に使用できます連絡ステータス。

GitHubの:UHBConnectivityManager

あなたがcocoapodsを使用している場合。方法の

pod 'UHBConnectivityManager' 
+0

handleNetworkChangeが複数回呼び出された可能性があります.Wifi接続が利用できない可能性があります –

0

ように、現在のネットワークの状態を保存するためにappdelegateで変数を使用startnotifier

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange:) name: kReachabilityChangedNotification object: nil]; 
reachability = [Reachability reachabilityForInternetConnection]; 
[reachability startNotifier]; 
0

最もシンプル:

reach = [Reachability reachabilityWithHostName:@"www.google.com"]; 
reach.reachableBlock = ^(Reachability *reach){ 
    NSLog(@"Reachable"); 
}; 

reach.unreachableBlock = ^(Reachability *reach){ 
    NSLog(@"Unreachable"); 
}; 
[reach startNotifier]; 

毎回ネットワークに変更があった、それぞれのブロックが呼び出されます。

0

ローカル変数の代わりにプロパティとして到達可能性を確認します。それはうまくいくだろう。

関連する問題