私のコードは[〜#〜] get [〜#〜]次のようなリクエストを行います:
_dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
// ...
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
if error != nil {
println("error = \(error)")
return
}
if let HTTPresponse = response as? NSHTTPURLResponse {
if HTTPresponse.statusCode == 200 { // Successfully got response
var err: NSError?
if let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &err) as? [String : AnyObject] {
// Success decoding JSON
} else {
// Failed -> stop activity indicator
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.activityIndicator.stopAnimating()
})
}
}
task.resume()
})
}
}
_
リクエストが終了する前にviewWillDisappear()
が呼び出された場合、リクエストを停止したいと思います。
現在、リクエストが終了する前にビューが消えないようです。進行中のGET/POSTリクエストをキャンセルする方法はありますか?
はい。ただし、外部アクセス用に保存する必要があります。task
にはcancel()
を使用しているのと同じように使用できるメソッドresume()
があります。
viewDidDisappear()
の場合、オブジェクトプロパティとして持つことをお勧めします-_var currentTask: NSURLSessionTask?
_、ディスパッチでは、_self.currentTask = ...
_の代わりに_let task = ...
_を使用し、viewDidDisappear()
self.currentTask?.cancel()
を呼び出します。