我从我的服务器加载我的json信息,如下所示,但是当我太快地点击一个不同的页面时,请求继续在后台尝试,并且有一个警告说viewController已经找不到了。如何取消所有请求onViewDisappear?
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()
}发布于 2019-02-19 22:58:36
将您的请求保存在某个位置,然后离开控制器调用:
task.cancel()发布于 2019-02-19 23:01:40
你可以使用2种方式
使用task.cancel()
task.cancel()正在做Cancels the task.
task.suspend()正在做Temporarily suspends a task.
发布于 2019-02-19 23:04:08
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()。
https://stackoverflow.com/questions/54768972
复制相似问题