2013-07-23 7 views
9

Ciao voglio catturare ogni volta che l'utente ottiene una connettività di rete nella mia richiesta per questo le mele classe raggiungibilità Ho aggiunto e al di sotto è il frammento di sto utilizzando nel mio AppDelegate metodo didFinishLaunchingWithOptions classe,Come modificare la notifica della connessione di rete dalla classe di raggiungibilità iOS?

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

e il mio selettore reachabilityChanged metodo è il seguito

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

ma qui non ricevo alcun tipo di notifica quando spengo il mio modalità aereo e quando ricevo una connettività di rete nel mio telefono.

Mi manca qualcosa?

+0

Controlla questo http://stackoverflow.com/a/10184617/1635315. Questo ti aiuterà davvero. – iKT

risposta

6

Forse si dovrebbe aggiungere l'osservatore prima startnotifier

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

Io uso una variabile in AppDelegate per memorizzare lo stato della rete attuale come un bool

@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 ha chiamato più volte probabilmente il numero di connessioni wifi disponibili, Come controllare lo stesso –

0

È possibile utilizzare questo wrapper sulla raggiungibilità per ottenere una richiamata basata su blocchi ogni volta che c'è un cambiamento in co stato della nnettività.

GitHub: UHBConnectivityManager

Se si utilizza cocoapods.

pod 'UHBConnectivityManager' 
0

semplice dei modi:

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

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

Ogni c'è un cambiamento nella rete, si chiamerà rispettivi blocchi.

0

Rendibilità raggiungibile come proprietà anziché variabile locale. Funzionerebbe.

Problemi correlati