Cancel a request Alamofire

前端 未结 5 970
青春惊慌失措
青春惊慌失措 2020-12-23 21:14

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. Kind

相关标签:
5条回答
  • 2020-12-23 21:37

    did you try this solution:

    let sessionManager = Alamofire.SessionManager.default 
    sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in 
    dataTasks.forEach { $0.cancel() } 
    uploadTasks.forEach { $0.cancel() } 
    downloadTasks.forEach { $0.cancel() } 
    }
    

    i also add a check to verify if is this the request that i want to cancel:

    dataTasks.forEach
                {
                    if ($0.originalRequest?.url?.absoluteString == url)
                    {
                        $0.cancel()
                    }
                }
    
    0 讨论(0)
  • 2020-12-23 21:54

    How about this:

    manager.session.invalidateAndCancel()
    
    0 讨论(0)
  • 2020-12-23 21:54

    SWIFT 5

    Alamofire.Session.default.session.getTasksWithCompletionHandler({ dataTasks, uploadTasks, downloadTasks in
                dataTasks.forEach { $0.cancel() }
                uploadTasks.forEach { $0.cancel() }
                downloadTasks.forEach { $0.cancel() }
            })
    
    0 讨论(0)
  • 2020-12-23 21:57

    In case it helps anyone, in my case I had a RequestRetrier on the SessionManager that retried the request after it was canceled, so be sure to check there!

    0 讨论(0)
  • 2020-12-23 21:59

    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() }
    }
    
    0 讨论(0)
提交回复
热议问题