Ios 如何持续监控NSURL连接以防internet连接中断

Ios 如何持续监控NSURL连接以防internet连接中断,ios,swift,nsurl,Ios,Swift,Nsurl,我正在使用此代码访问网页的HTML: let myUrl = NSURL(string: "http://www.mywebsite.com/page.html") let request = NSMutableURLRequest(URL: myUrl!) request.HTTPMethod = "POST" let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, e


我正在使用此代码访问网页的HTML:

let myUrl = NSURL(string: "http://www.mywebsite.com/page.html")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        if error != nil {
             print("Error: \(error)")
        } 
        dispatch_async(dispatch_get_main_queue()) {
            self.testLabel.text = "\(responseString!)"
        }
    }
}
task.resume()
但是,如果用户的internet连接中断,应用程序将崩溃。为了解决这个问题,我在代码中插入了以下代码块:

if Reachability.isConnectedToNetwork() != true {
        self.sendAlert("Error", message: "You are not connected to the internet")
        timer.invalidate()
        return
    }
let myUrl = NSURL(string: "http://www.casacorazon.org/ios.html")
    let request = NSMutableURLRequest(URL: myUrl!)
    request.HTTPMethod = "POST"
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            if error != nil {
                 print("Error: \(error)")
            } 
            dispatch_async(dispatch_get_main_queue()) {
                self.testLabel.text = "\(responseString!)"
            }
        }
    }
    task.resume()
这将检查internet连接是否可用,如果不可用,将停止运行自动数据库检查的计时器并向用户发送消息。这种方法在80%的时间内有效,但是如果在调用NSURL函数时互联网连接中断,应用程序仍然会崩溃。有没有一种方法可以更有效地监控连接,并在不调用nil值和使应用程序崩溃的情况下,以接近100%的成功率向用户发出警报
感谢您抽出时间,

尼克

使用do/try/catch()。当你说“应用程序崩溃”时,这是什么意思?请发布准确的错误消息和回溯。@iamnickpitoniak您需要替换所有出现的强制展开,并使用guard或如果允许的话。尝试添加“guard let data=data where error==nil else{return}”,而不是这种低效的ping,研究如何使用
可达性
@AnthonyKong有没有办法生成一个简单的try/catch语句来包装整个函数?我已经花了一段时间阅读教程,但我仍然不确定如何称呼个别错误。是否有一种方法可以执行以下操作:{NSURL connection}捕获{present user with error and terminate NSURL interval}?非常感谢您的帮助使用do/try/catch()。当你说“应用程序崩溃”时,这是什么意思?请发布准确的错误消息和回溯。@iamnickpitoniak您需要替换所有出现的强制展开,并使用guard或如果允许的话。尝试添加“guard let data=data where error==nil else{return}”,而不是这种低效的ping,研究如何使用
可达性
@AnthonyKong有没有办法生成一个简单的try/catch语句来包装整个函数?我已经花了一段时间阅读教程,但我仍然不确定如何称呼个别错误。是否有一种方法可以执行以下操作:{NSURL connection}捕获{present user with error and terminate NSURL interval}?非常感谢你的帮助