ios - 在 iOS 中取消 HTTP 连接

标签 ios swift nsurlsession

我想在后台应用程序中取消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/

相关文章:

ios - 如何在 iOS 中放大 UIImage 以清除像素而不变得模糊?

swift - 如何返回在 Swift 任务中定义的变量

ios - 如何遍历 Swift 数组并在 iOS 图表中使用数据?

swift - 如何从 NSURLSession.sharedSession().dataTaskWithRequest 获取数据

iphone - 使用 00 :00:00 as time 获取今天的 NSDate

ios - 针对 iOS7 优化应该怎么做?

ios - Swift、单例、代表函数的变量

ios - 在后台下载期间未调用我的 NSURLSessionDelegate 方法

ios - 在 iOS 中计算网络速度。数据较少的往返时间不会告知确切的网络速度

ios - Xcode 的 Profiler 不显示符号名称