Estoy enviando una solicitud a la que se activa basada en el temporizador. Pero si presiono el botón de atrás de la solicitud todavía parece estar activo y la respuesta en los giros, se bloquea la aplicación. Sugerimos una manera de cancelar el pedido.

Con Xcode 8.2.1
Swift 3

Aquí está la muestra de solicitud :

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 trató de invalidar el temporizador en viewDidDisappear pero ninguna ayuda.

Gracias !!

Compruebe por favor stackoverflow.com/questions/32999892/…
Que no es útil como invalidar sería necesario reinicializar el de administrar y no voy a ser capaz de hacer más llamadas.

OriginalEl autor Ankit Kumar Gupta | 2017-01-05

3 Comentarios

  1. 32

    Alamofire 4 /Swift 3 /Xcode 8

    Puede cancelar una solicitud única de la siguiente manera:

    1 – en Primer lugar obtener 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 – Luego, en su viewDidDisappear, simplemente llame a:

    request.cancel()


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

    OriginalEl autor Enrique

  2. 8

    intenta este 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() } 
    }

    yo también añadir una verificación para comprobar si está presente la solicitud que quiero cancelar:

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

    OriginalEl autor Constantin Saulenco

  3. 0

    Cómo sobre esto:

    manager.session.invalidateAndCancel()

    OriginalEl autor zero3nna

Dejar respuesta

Please enter your comment!
Please enter your name here