2011-11-11 10 views
7

Actualmente estoy comprobando conexión de red en el uso de este viewDidLoad:¿Cómo detectar cambios en la red con Accesibilidad?

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

pero también quiero ser notificado si hay un cambio de red, como wifi dejó caer, o wifi está de vuelta, por lo que puede hacer cambia en consecuencia.

¿Cómo puedo ajustar mi método para hacer algo como eso?

+0

Posible duplicado de: http://stackoverflow.com/questions/784582/easiest-way-to-determine-whether-iphone-internet-connection-is-available – 0x8badf00d

Respuesta

6

Otra posible solución es añadir una notificación en NS "didfinishlaunching aplicación":

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

y en el método checkForReachability hacer esto:

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

Esto no funcionará según lo previsto. Inicialización de accesibilidad y startNotifier deben ir en appDidFinishLaunching, porque checkForReachability no se invocará si no inicia el Notificador. –

0

He usado el excelente extensión a la Accesibilidad clase que Donoho Design Group ha creado. Tiene notificaciones que le permiten recibir alertas cuando cambia el estado de la red.

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

Buena suerte

9

1- añadir SystemConfiguration.framework a su proyecto.

2- Descarga los siguientes archivos de GitHub

Reachability.h 
Reachability.m 

3- Añadir estos archivos en sus proyectos

4- añadir @class Reachability; en YourViewController.h

#import <UIKit/UIKit.h> 

@class Reachability; 

5- Agregar variable Reachability* internetReachable; en YourViewController.h

#import <UIKit/UIKit.h> 

@class Reachability; 

@interface YourViewController : UIViewController { 
    Reachability* internetReachable; 
} 

6- añadir Reachability.h en YourViewController.m

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

7- add siguientes líneas en -(void)ViewDidLoad en YourViewController.m

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

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

8- add siguiente función después de -(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; 
     } 
    } 
} 

Ahora nunca Si cambia la conexión a Internet, verá la consola de inicio de sesión.

+1

@ Salim, Woking como un encanto ... Gracias hombre –

Cuestiones relacionadas