タイマーに基づいてトリガーされるリクエストを送信しています。しかし、[戻る]ボタンを押すと、リクエストはまだアクティブであるように見え、レスポンスが順番にアプリをクラッシュさせます。リクエストをキャンセルする方法をご提案ください。
Xcode 8.2.1の使用Swift 3
サンプルリクエストは次のとおりです。
Alamofire.request(path!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createHeader()).responseJSON {
response in
switch response.result {
case .success(let data):
success(data as AnyObject?)
case .failure(let error) :
failure(error as NSError)
}
}
ViewDidDisappearでタイマーを無効にしようとしましたが、何の助けにもなりませんでした。
ありがとう!!
以下のようにシングルリクエストをキャンセルできます。
1-最初にリクエストを取得します:
_let request = Alamofire.SessionManager.default.request(path!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createHeader()).responseJSON { response in
switch response.result {
case .success(let data):
success(data as AnyObject?)
case .failure(let error) :
failure(error as NSError)
}
}
_
2-次に、viewDidDisappearで、次のように呼び出します。
request.cancel()
キャンセルできますすべてのリクエスト以下のように:
_Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
sessionDataTask.forEach { $0.cancel() }
uploadData.forEach { $0.cancel() }
downloadData.forEach { $0.cancel() }
}
_
this 解決策を試しましたか:
let sessionManager = Alamofire.SessionManager.default
sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
dataTasks.forEach { $0.cancel() }
uploadTasks.forEach { $0.cancel() }
downloadTasks.forEach { $0.cancel() }
}
また、これがキャンセルしたいリクエストであるかどうかを確認するチェックを追加します:
dataTasks.forEach
{
if ($0.originalRequest?.url?.absoluteString == url)
{
$0.cancel()
}
}
これはどう:
manager.session.invalidateAndCancel()