2017-02-28 1 views
1

Mon code pour vérifier une connexion Internet, j'ai découvert hier dans un avion, est terriblement lent. J'utilise la technique dans de nombreux anciens SO answers de vérifier un NSUURL, cependant, il a littéralement fallu quinze secondes ou plus pour retourner FAUX dans un avion sans connectivité rendant l'application essentiellement inutilisable.IOS/Objective-C: Le moyen le plus rapide pour vérifier la connexion Internet - 2017

Y at-il une méthode asynchrone fiable qui ferait cela? Les gens recommandent la classe d'accessibilité de Tony Million dans les réponses plus anciennes, mais cela semble très compliqué et Apple semble rejeter certaines applications using it. J'apprécierais que quelqu'un puisse suggérer le moyen le plus rapide et fiable de vérifier la connexion Internet en 2017. Merci.

- (BOOL)connected 
    { 
     NSURL *scriptUrl = [NSURL URLWithString:@"https://www.google.com"]; 
     NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; 
     if (data) { 
      NSLog(@"Device is connected to the internet"); 
      return TRUE; 
     } 
     else { 
      NSLog(@"Device is not connected to the internet"); 
      return FALSE; 
     } 
    } 
+1

Respect de l'affrètement d'un jet privé pour votre environnement de test. Avoir un upvote pour ça. – Bathsheba

+1

Voici l'exemple de code d'Apple. https://developer.apple.com/library/content/samplecode/Reachability/Listings/Reachability_Reachability_h.html – Dare

+0

comment améliorer Xcode IDE;) – zztop

Répondre

3

est joignabilité la bonne façon ... même en 2017.

Toutes les différentes classes d'atteignabilité sont basées sur l'exemple de code d'Apple.

Cela peut sembler compliqué car il utilise des API C. Mais l'utilisation est simple:

- (BOOL)connected 
{ 
    Reachability *reach = [Reachability reachabilityForInternetConnection]; 

    if ([reach isReachable]) { 
     NSLog(@"Device is connected to the internet"); 
     return TRUE; 
    } 
    else { 
     NSLog(@"Device is not connected to the internet"); 
     return FALSE; 
    } 
} 

Si vous utilisez la classe joignabilité d'Apple au lieu de Tony Million de, remplacer [reach isReachable] avec [reach currentReachabilityStatus] != NotReachable.

Ne vous inquiétez pas, Apple pourrait rejeter une application qui l'utilise. Si cela vous arrive, renommez simplement la classe de Reachability en MyReachability.