Search code examples
iosxcodeswift3http-postalamofire

Cancel a request Alamofire


I am sending a request which is triggered based on timer. But if I press the back button the request still seems to be active and the response in turns crashes the app. Kindly suggest a way to cancel the request.

Using Xcode 8.2.1 Swift 3

Here is the sample request :

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)
    }
}

Even tried invalidating the timer on viewDidDisappear but to no help.

Thanks !!


Solution

  • Alamofire 4 / Swift 3 / Xcode 8

    You can cancel a single request as below:

    1 - First get the request:

    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 - Then, in your viewDidDisappear, just call:

    request.cancel()


    You can cancel all requests as below:

    Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
        sessionDataTask.forEach { $0.cancel() }
        uploadData.forEach { $0.cancel() }
        downloadData.forEach { $0.cancel() }
    }