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}?非常感谢你的帮助