2015-10-08 1 views
2

Je voulais cette classe pour pousser ou montrer un alertView dire qu'il est pas connecté à InternetComment vérifier si l'application est connecté à Internet

public class Reachability { 

class func isConnectedToNetwork()->Bool{ 

    var Status:Bool = false 
    let url = NSURL(string: "http://google.com/") 
    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "HEAD" 
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData 
    request.timeoutInterval = 10.0 

    var response: NSURLResponse? 


    do{ 
     var data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) 
     print(response) 
    } catch { 
     //handle error 
     print(error) 

    } 


    if let httpResponse = response as? NSHTTPURLResponse { 
     if httpResponse.statusCode == 200 { 
      Status = true 
     } 
    } 

    return Status 
} 
} 

Voici ma déclaration à l'intérieur du mainViewcontroller (initiale)

if Reachability.isConnectedToNetwork() == true { 
}else { 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let viewController:UIViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("SignInSignUpVCIdentifier"))! 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }) 
    }//end of 

Il ne pousse rien. Il est montrant avoir attenté 2 couchage pour 4,34324

Répondre

2

Essayez ceci pour vérifier la connectivité réseau du dispositif

import SystemConfiguration 



func isConnectedToNetwork() -> Bool { 

    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 
    let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
    } 

    var flags = SCNetworkReachabilityFlags() 
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { 
     return false 
    } 

    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
    return (isReachable && !needsConnection) 
    } 

Ajoutez le code suivant dans votre fonction pour vérifier le réseau est accessible ou non et obtenir l'alerte

if self.isConnectedToNetwork() { 
     print(self.isConnectedToNetwork()) 
     // isConnectedToNetwork == true 
     // It comes here when its connected to network 
     let alertController = UIAlertController(title: "", message: "Connected to internet", preferredStyle: .Alert) 

     let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in 
      print("you have pressed OK button"); 
     } 
     alertController.addAction(OKAction) 

     self.presentViewController(alertController, animated: true, completion:nil) 
    } 
    else { 
     print(self.isConnectedToNetwork()) 
     // isConnectedToNetwork == false 
     // It comes here when its not connected to network  
    let alertController = UIAlertController(title: "", message: "Not able to connect to internet", preferredStyle: .Alert) 

     let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in 
      print("you have pressed OK button"); 
     } 
     alertController.addAction(OKAction) 

     self.presentViewController(alertController, animated: true, completion:nil) 

    } 

espoir que cela pourrait être utile

+0

il a parfaitement fonctionné! Merci! – suisied

+0

Je l'ai testé sur un iPhone 6 physique, ça ne marche pas. J'ai désactivé les données cellulaires et ça a marché, vous avez une idée à ce sujet? ça marche quand le 4g ​​est éteint. – suisied

+0

J'ai mis à jour la réponse. Vous obtiendrez le message "Impossible de se connecter à Internet" lorsque 4g/3g/2g/wifi est "OFF" et si tout ce qui précède est "ON" alors vous obtiendrez une invite "Connecté à Internet". – Karlos

1

// Traduction à Swift 3.0

import SystemConfiguration 

func isConnectedToNetwork() -> Bool { 

    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 
    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
      SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
     } 
    } 
    var flags = SCNetworkReachabilityFlags() 

    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { 
     return false } 
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
    return (isReachable && !needsConnection) 

} 
+1

Bonjour, bienvenue à stackoverflow. S'il vous plaît décrire les réponses plus. Une réponse claire aidera les gens à comprendre ce que vous voulez dire et augmentera la chance de choisir comme réponse –

0

// Traduction à Swift 3.0 pour le reste de l'exemple

if self.isConnectedToNetwork() { 
     print(self.isConnectedToNetwork()) 
     // isConnectedToNetwork == true 
     // It comes here when its connected to network 
     let alertController = UIAlertController(title: "", message: "Connected to internet", preferredStyle: .alert) 

     let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in 
      print("you have pressed OK button"); 
     } 
     alertController.addAction(OKAction) 

     self.present(alertController, animated: true, completion:nil) 
    } 
    else { 
     print(self.isConnectedToNetwork()) 
     // isConnectedToNetwork == false 
     // It comes here when its not connected to network 
     let alertController = UIAlertController(title: "", message: "Not able to connect to internet", preferredStyle: .alert) 

     let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in 
      print("you have pressed OK button"); 
     } 
     alertController.addAction(OKAction) 

     self.present(alertController, animated: true, completion:nil) 

    }