首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止urlRequest onViewDisappear

停止urlRequest onViewDisappear
EN

Stack Overflow用户
提问于 2019-02-19 22:50:27
回答 3查看 59关注 0票数 0

我从我的服务器加载我的json信息,如下所示,但是当我太快地点击一个不同的页面时,请求继续在后台尝试,并且有一个警告说viewController已经找不到了。如何取消所有请求onViewDisappear?

代码语言:javascript
复制
if let requestURL = URL(string: "https://www.example.com/file.php") {

        var urlRequest = URLRequest(url: requestURL)
        urlRequest.httpMethod = "POST"
        let postString = "email=\(loginUsername.text!)"
        urlRequest.httpBody = postString.data(using: .utf8)

        let session = URLSession.shared
        let task = session.dataTask(with: urlRequest as URLRequest) {  (data, response, error) in

            if let data = data {
                do {
                    if let jsonResult = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] {

                        // Async Stuff
                        DispatchQueue.main.async{

                            // do things
                        }

                        DispatchQueue.main.async(execute: {
                        })
                    }
                } catch {
                    print("Error: \(error)")
                }
            }
        }
        task.resume()
    }
EN

回答 3

Stack Overflow用户

发布于 2019-02-19 22:58:36

将您的请求保存在某个位置,然后离开控制器调用:

代码语言:javascript
复制
task.cancel()
票数 1
EN

Stack Overflow用户

发布于 2019-02-19 23:01:40

你可以使用2种方式

使用task.cancel()

  • Using

  • 的 task.suspend()

task.cancel()正在做Cancels the task.

task.suspend()正在做Temporarily suspends a task.

票数 0
EN

Stack Overflow用户

发布于 2019-02-19 23:04:08

代码语言:javascript
复制
class DataCall {
    var task: URLSessionDataTask?

    func load() {
        guard let requestURL = URL(string: "https://www.example.com/file.php") else { return }

        var urlRequest = URLRequest(url: requestURL)
        urlRequest.httpMethod = "POST"
        let postString = "email=\(loginUsername.text!)"
        urlRequest.httpBody = postString.data(using: .utf8)

        let session = URLSession.shared
        task = session.dataTask(with: urlRequest as URLRequest) {  (data, response, error) in

            if let data = data {
                do {
                    if let jsonResult = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] {

                        // Async Stuff
                        DispatchQueue.main.async{

                            // do things
                        }
                    }
                } catch {
                    print("Error: \(error)")
                }
            }
        }
        task.resume()
    }

    func stopTask() {
        task.cancel()
    }
}

然后在你的viewWillDissapear中调用dataCall.stopTask()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54768972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档