suisied suisied - 2 months ago 10
iOS Question

How to check if application is connected to Internet

I wanted this class to push or show an alertView saying it's not connected to 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
}
}


Here is my declaration inside the mainViewcontroller(initial)

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


It doesn't push anything. It's showing making attempt 2 sleeping for 4.34324

Answer

Try this to check the network connectivity of the device

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)
   }

Add the following code in your function to check the network is reachable or not and get the alert

   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)

   }

Hope this might be helpful