2013-07-23 1 views
9

Hallo Ich möchte zu erfassen, wenn Benutzer für diese Ich habe Äpfel Erreichbarkeits Klasse eine Netzwerkverbindung in meiner Anwendung wird hinzugefügt und unten ist das Snippet ich verwende in meiner AppDelegate Klasse didFinishLaunchingWithOptions Methode,Wie erhalte ich Änderungen in der Netzwerkverbindungsbenachrichtigung von der iOS-Erreichbarkeitsklasse?

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

und mein reachabilityChanged Selektor Methode ist als unten

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

aber hier ist mir nicht jede Art von Benachrichtigung bekommen, wenn ich meinen Flugmodus ausschalten und wenn ich eine Netzwerkverbindung in meinem Handy bekommen.

Fehle ich etwas?

+0

Überprüfen Sie diese http://stackoverflow.com/a/10184617/1635315. Das wird dir wirklich helfen. – iKT

Antwort

6

Vielleicht sollten Sie den Beobachter vor startnotifier hinzufügen

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

ich eine Variable in AppDelegate verwenden Sie den aktuellen Netzwerkstatus als Bool zu speichern

@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]; 
// } 
} 
+0

handleNetworkChange genannt mehrmals wahrscheinlich die Anzahl der Wifi-Verbindungen zur Verfügung, wie Sie das gleiche zu steuern –

0

Sie können diesen Wrapper für die Erreichbarkeit verwenden, um bei jeder Änderung von co einen blockbasierten Rückruf zu erhalten Nnetivitätsstatus.

GitHub: UHBConnectivityManager

Wenn Sie cocoapods verwenden.

pod 'UHBConnectivityManager' 
0

Simplest Möglichkeiten:

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

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

Jedesmal, gibt es eine Änderung in Netzwerk, werden die entsprechenden Blöcke genannt werden.

0

Erreichbarkeit als Ihre Eigenschaft anstelle der lokalen Variablen festlegen. Es würde funktionieren.

Verwandte Themen