我想在后台应用程序中取消Http
连接。
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "my url")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error)
return
}
guard let data = data else {
print("Data is empty")
return
}
do {
if let jsonResult = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary {
print("ASynchronous\(jsonResult)")
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
task.resume()
}
如何在程序中的任意位置取消它?
最佳答案
一种方法是保留对任务的引用,而不是本地“任务”。
例如,在您的 viewDidLoad 之外创建:
var taskToReference: NSURLSessionDataTask!
然后更改您的代码,将 let task = URLSession...
改为 taskToReference = URLSession...
。
现在你有了一个引用变量,你可以在你的 View Controller 中的任何地方使用它。只需在类里面的任何地方执行 taskToReference.cancel()
即可。
为了让您可以在整个应用程序的任何 View 中执行此操作,而不是在您的类中创建 var,而是在您的 AppDelegate 中创建它并将引用保存在那里!
在您的应用委托(delegate)中:
var taskToReference: NSURLSessionDataTask!
然后在您的 viewDidLoad 中,在引用应用范围的 var 之前获取对应用委托(delegate)的引用:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
然后将您的初始任务更改为:
appDelegate.taskToReference = URLSession...
关于ios - 在 iOS 中取消 HTTP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40788290/