class APIClient {
    var user = User()
    let alamoFireManager : Alamofire.Manager?
    let center = NSNotificationCenter.defaultCenter()


    init(){
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForRequest = 4 //seconds
        configuration.timeoutIntervalForResource = 4
        self.alamoFireManager = Alamofire.Manager(configuration: configuration)
    }

    func test(){
        //This does not respect the 4 second time out. Why?
        self.alamoFireManager!.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                        (req, res, json, error)  in
                        if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                        }
                    }
    }
  • Establezca un punto de interrupción en la test función de impresión y la self.alamoFireManager!.session.configuration.timeoutIntervalForRequest
  • Estás suponiendo que la primera vez que se llama el método test(), debe tener un 4 segundos de retraso?
  • El retraso es para la solicitud http no para el total método de prueba. Por ejemplo, el tiempo de espera de la dosis no se aplican a su handleAPIResponse llamada.
  • fueron capaces de resolver esto?
  • ¿Cuál es el uso de ‘centro’ objeto creado?
InformationsquelleAutor TIMEX | 2015-06-28

6 Comentarios

  1. 37

    ¿Estás seguro de que los 4 segundos de tiempo de espera no se aplica? He creado un experimento:

        let center = NSNotificationCenter.defaultCenter()
        var alamoFireManager : Alamofire.Manager?
    
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForRequest = 4 //seconds
        configuration.timeoutIntervalForResource = 4
        self.alamoFireManager = Alamofire.Manager(configuration: configuration)
    
        self.alamoFireManager!.request(.POST, "http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/2", parameters: nil).responseJSON {
            (req, res, json, error)  in
            println("First json \(json)")
            println("First error \(error)")
        }
    
        self.alamoFireManager!.request(.POST, "http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6", parameters: nil).responseJSON {
            (req, res, json, error)  in
            println("Second \(json)")
            println("Second \(error)")
        }

    y la salida de la consola que tengo:

    First json Optional({
        name = timeoutTest;
        value = 2;
    })
    First error nil
    Second nil
    Second Optional(Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x7f91dc8223e0 {NSErrorFailingURLKey=http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6, NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6})

    La Url de mi ejemplo son actualmente hacia abajo, voy a tratar de volver a ponerlos en línea. Puede utilizar la url de la muestra de prueba. Mediante el establecimiento de un número diferente al final se puede modificar el tiempo de espera (en segundos).

    He utilizado el cocoapods última versión de Alamofire.

    • Swift 3 / abril de 2017: debe ser Alamofire.SessionManager, y URLSessionConfiguration.default
    • Usted puede usar este enlace para hacer la prueba: httpstat.nosotros/200?dormir=2000
  2. 9

    Necesita crear una variable global para el administrador de solicitudes:

    var alamoFireManager = Alamofire.Manager.sharedInstance

    Y después de configurar los parámetros personalizados:

     let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForRequest = 4 //seconds
        configuration.timeoutIntervalForResource = 4
        self.alamoFireManager = Alamofire.Manager(configuration: configuration)
    • esto funcionó para mí, gracias
  3. 8

    Aquí está el Swift 3.0 /Alamofire 4.0 código para obtener un alamofireManager que tiene una de 5 segundos de tiempo de espera:

        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForResource = 5 //seconds
    
        let alamofireManager = Alamofire.SessionManager(configuration: configuration)
    • En caso de Alamofire 4.0 Alamofire.El administrador ha cambiado a Alamofire.SessionManager como indica @Jamie
    • no wokring a mí. ¿Puede usted proporcionar el código para la última alamofire versión? Me dieron : «Alamofire.SessionManager(configuración: <#T##URLSessionConfiguration#>, delegado: <#T##SessionDelegate#>, serverTrustPolicyManager: <#T##ServerTrustPolicyManager?#>)»
  4. 6

    Supongo que esto funciona para usted, tenga en cuenta que usted tiene que declarar instancia de Alamofire.El administrador de fuera de la función, por favor vea a continuación el código

    //Declare it out side the function
    var alamoFireManager : Alamofire.Manager!
    
    func callUrl() {
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForResource = 10800 //seconds
        configuration.timeoutIntervalForRequest = 10800 //seconds
    
        alamoFireManager = Alamofire.Manager(configuration: configuration)
    
        alamoFireManager.request(.POST, url, parameters: dir as? [String : AnyObject], encoding: .JSON, headers: [ "Content-Type": "application/json"])
            .responseJSON { response in
        }
    }

    espero que esto ayude

    • puedo confirmar que esto no funcionará si la instancia de alamofire manager es declaradas dentro de la función.
  5. 3
     init(){
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForResource = 4
        configuration.timeoutIntervalForRequest = 4
        self.alamoFireManager = Alamofire.Manager(configuration: configuration)
        self.alamoFireManager!.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                        (req, res, json, error)  in
                        if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                        }
                    }
    }

    Uso self.alamoFireManager!.request en la misma función init , retardo del tiempo de espera es sólo para la solicitud no para toda la función. puede ser de ayuda.

    • u puede proporcionar el código para la última alamofire versión? Tks
  6. 1

    Tengo NSURLErrorDomain cuando use el método anterior .
    Este es mi código (swift 3.2/Alamofire 4.4)

        let manager = Alamofire.SessionManager.default
        manager.session.configuration.timeoutIntervalForRequest = 4
    
        manager.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                        (req, res, json, error)  in
                        if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                        }

Dejar respuesta

Please enter your comment!
Please enter your name here