swiftyjson example ios swift alamofire

ios - example - swiftyjson alamofire



AlamoFire no respeta el intervalo de tiempo de espera (6)

¿Estás seguro de que no se aplica el tiempo de espera de 4 segundos? 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 obtuve:

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

Las URL de mi ejemplo están actualmente inactivas, intentaré volver a ponerlas en línea. Puede usar las urls del ejemplo para probar. Al establecer un número diferente al final, puede modificar el tiempo de espera (en segundos).

He usado cocoapods la última versión de Alamofire.

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


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

let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForResource = 5 // seconds let alamofireManager = Alamofire.SessionManager(configuration: configuration)


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)


Obtuve NSURLErrorDomain cuando utilicé el método anterior. Este es mi código (veloz 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){ }


Supongo que este funciona para ti, ten en cuenta que tienes que declarar una instancia de Alamofire.Manager fuera de la función, por favor mira el código a continuación

//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 te ayude


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

Use self.alamoFireManager!.request en la misma función init, el retraso de tiempo de espera es solo para la solicitud, no para toda la función. puede ser puede ayudar.