2010-04-19 9 views
1

J'ai vu n'importe quel article sur l'accessibilité, mais les gens ne donnent pas vraiment la réponse exacte au problème. Dans mon application, j'utiliser le code joignabilité de la pomme et dans mon appDelegate-je utiliser ceci:Connexion Internet Iphone (Accessibilité)


-(BOOL)checkInternet { 

Reachability *reachability = [Reachability reachabilityWithHostName:@"www.google.com"]; 

NetworkStatus internetStatus = [reachability currentReachabilityStatus]; 
BOOL internet; 

if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) { 
    internet = NO; 
}else { 
    internet = YES; 
} 
return internet;  
} 

Le problème est même si j'ai une connexion Internet, ce code me disant que je n'ai pas. Est-ce que quelqu'un sait quoi faire pour que cela fonctionne?

Merci,

+0

Juste essayez ce code cela fonctionnera parfaitement. http://stackoverflow.com/questions/8356656/reachability-crashes-app/14452743#14452743 –

Répondre

7

Vous devriez probablement utiliser +[Reachability reachabilityForInternetConnection] plutôt que pour un nom joignabilité particulier (à moins bien sûr que ce que vous avez réellement besoin).

Il peut y avoir toutes sortes de raisons pour lesquelles un serveur particulier peut ne pas être joignable alors que vous avez encore une connexion Internet fonctionnelle, après tout.

C'est ce que je fais:

BOOL hasInet; 
Reachability *connectionMonitor = [Reachability reachabilityForInternetConnection]; 
[[NSNotificationCenter defaultCenter] 
    addObserver: self 
    selector: @selector(inetAvailabilityChanged:) 
    name: kReachabilityChangedNotification 
    object: connectionMonitor]; 

hasInet = [connectionMonitor currentReachabilityStatus] != NotReachable; 

puis

-(void)inetAvailabilityChanged:(NSNotification *)notice { 
    Reachability *r = (Reachability *)[notice object]; 
    hasInet = [r currentReachabilityStatus] != NotReachable; 
} 

qui fonctionne bien pour moi.

+0

merci mais je trouve aussi une autre façon de résoudre mon problème. En lisant le Reachability_readme.txt, ils ont dit que la connexion peut prendre du temps en essayant d'identifier hostName (et donc parfois échouer), donc j'utilise simplement le google DNS like (74.125.71.104) et maintenant ça marche bien et c'est rapide aussi . – ludo

+0

Salut ludo et Frank, j'ai utilisé votre code et l'exemple de code d'accessibilité, mais il ne peut toujours pas détecter la disponibilité d'Internet correctement. Comment utilisez-vous l'adresse IP 74.125.71.104? Je devine ne devrait pas être reachabilityWithAddress: (const struct sockaddr_in *) hostAddress; ou reachabilityWithHostName: (NSString *) hostName? Merci. – lionfly

+0

Salut ludo pouvez-vous partager votre code pour moi pour vérifier la connectivité Internet. –

0

Utilisez ce code pour vérifier si l'appareil est connecté à Internet ou non

utiliser ce code dans viewDidLoad:

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

    hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"] ; 
    [hostReachable startNotifier]; 

et ajoutez cette fonction à votre code:

-(void) checkNetworkStatus:(NSNotification *)notice 
{ 
    recheabilityBool=FALSE; 
    nonrecheabilityBool=FALSE; 
    // called after network status changes 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
     case NotReachable: 
     { 
      nonrecheabilityBool=TRUE; 
      internetCon=0; 
      //NSLog(@"The internet is down."); 


      break; 
     } 
     case ReachableViaWiFi: 
     { 
      NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
      internetCon=404; 
      [prefs setInteger:internetCon forKey:@"conKey"]; 

      //NSLog(@"The internet is working via WIFI."); 
      break; 

     } 
     case ReachableViaWWAN: 
     { 
      //NSLog(@"The internet is working via WWAN."); 

      break; 
     } 
    } 

    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      internetCon=0; 
      if(nonrecheabilityBool==FALSE) 
      { 
       //NSLog(@"A gateway to the host server is down."); 
      } 
      break; 

     } 
     case ReachableViaWiFi: 
     { 
      if(recheabilityBool==FALSE) 
      { 

       recheabilityBool=TRUE; 

       NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
       internetCon=404; 
       [prefs setInteger:internetCon forKey:@"conKey"]; 


       //NSLog(@"The internet is working via WIFI."); 
       break; 
      } 


      //NSLog(@"A gateway to the host server is working via WIFI."); 

      break; 
     } 
     case ReachableViaWWAN: 
     { 
      //NSLog(@"A gateway to the host server is working via WWAN."); 
      break; 
     } 
    } 
} 

- (BOOL)connected 
{ 
    Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable); 
}