ios - example - module ''alamofire'' has no member named ''request''
Cancelar una solicitud Alamofire (3)
Alamofire 4 / Swift 3 / Xcode 8
Puede cancelar una sola solicitud de la siguiente manera:
1 - Primero recibe la solicitud:
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 - Entonces, en su vistaDidDisparecer , simplemente llame:
request.cancel()
Puede cancelar todas las solicitudes de la siguiente manera:
Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
sessionDataTask.forEach { $0.cancel() }
uploadData.forEach { $0.cancel() }
downloadData.forEach { $0.cancel() }
}
Estoy enviando una solicitud que se activa en función del temporizador. Pero si presiono el botón Atrás, la solicitud todavía parece estar activa y la respuesta, por turnos, bloquea la aplicación. Por favor sugerir una manera de cancelar la solicitud.
Utilizando Xcode 8.2.1 Swift 3
Aquí está la solicitud de muestra:
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)
}
}
Incluso intenté invalidar el temporizador en viewDidDisappear pero sin ayuda.
Gracias !!
¿probaste this solución?
let sessionManager = Alamofire.SessionManager.default
sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
dataTasks.forEach { $0.cancel() }
uploadTasks.forEach { $0.cancel() }
downloadTasks.forEach { $0.cancel() }
}
También agrego un cheque para verificar si esta es la solicitud que deseo cancelar:
dataTasks.forEach
{
if ($0.originalRequest?.url?.absoluteString == url)
{
$0.cancel()
}
}
Qué tal esto:
manager.session.invalidateAndCancel()