web-dev-qa-db-fra.com

Annuler une demande Alamofire

J'envoie une demande qui est déclenchée en fonction de la minuterie. Mais si j'appuie sur le bouton de retour, la demande semble toujours active et la réponse à son tour bloque l'application. Veuillez suggérer un moyen d'annuler la demande.

Utilisation de Xcode 8.2.1 Swift 3

Voici l'exemple de demande:

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

Même essayé d'invalider le minuteur sur viewDidDisappear mais sans aide.

Merci !!

24
Ankit Kumar Gupta

Alamofire 4/Swift 3/Xcode 8

Vous pouvez annuler une demande unique comme ci-dessous:

1 - Obtenez d'abord la demande:

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 - Ensuite, dans votre viewDidDisappear, appelez simplement:

request.cancel()


Vous pouvez annuler toutes les demandes comme ci-dessous:

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

avez-vous essayé cette 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() } 
}

j'ajoute également un chèque pour vérifier s'il s'agit bien de la demande que je souhaite annuler:

dataTasks.forEach
            {
                if ($0.originalRequest?.url?.absoluteString == url)
                {
                    $0.cancel()
                }
            }
9

Que dis-tu de ça:

manager.session.invalidateAndCancel()
0
zero3nna