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 !!
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() }
}
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()
}
}
Que dis-tu de ça:
manager.session.invalidateAndCancel()