swiftyjson example ios swift alamofire

ios - example - swiftyjson alamofire



Establecer tiempo de espera en Alamofire (8)

Estoy usando Alamofire 4.0.1 y quiero establecer un tiempo de espera para mi solicitud . He intentado las soluciones dadas en esta question :

En el primer caso , lanza un NSURLErrorDomain (el tiempo de espera se establece correctamente):

let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 10 let sessionManager = Alamofire.SessionManager(configuration: configuration) sessionManager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"]) .responseJSON { response in switch (response.result) { case .success: //do json stuff break case .failure(let error): if error._code == NSURLErrorTimedOut { //timeout here } print("/n/nAuth request failed with error:/n /(error)") break } }

En el segundo caso , el tiempo de espera no se reemplaza y aún se establece en 60 segundos.

let manager = Alamofire.SessionManager.default manager.session.configuration.timeoutIntervalForRequest = 10 manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])

Estoy corriendo en ios 10.1

Mi código: (no funciona)

let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 10 // seconds configuration.timeoutIntervalForResource = 10 let alamoFireManager = Alamofire.SessionManager(configuration: configuration) alamoFireManager.request("my_url", method: .post, parameters: parameters).responseJSON { response in switch (response.result) { case .success: //Success.... break case .failure(let error): // failure... break } }

Se solucionó el hilo de github de Alamofire: el tiempo de espera de configuración de Alamofire 4.3.0 arroja el error NSURLErrorDomain # 1931


Basado en la respuesta de @ kamal-thakur.

Swift 3 :

var request = URLRequest(url: NSURL.init(string: "YOUR_URL") as! URL) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.timeoutInterval = 10 // 10 secs let postString = "param1=/(var1)&param2=/(var2)" request.httpBody = postString.data(using: .utf8) Alamofire.request(request).responseJSON { response in // do whatever you want here }


Como dijo Matt el problema es el siguiente

La diferencia aquí es que el administrador inicializado no es de su propiedad y se desasigna poco después de que salga de su alcance. Como resultado, cualquier tarea pendiente se cancela.

La solución a este problema fue escrita por rainypixels.

Importación Fundación Importar Alamofire

class NetworkManager { var manager: Manager? init() { let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() manager = Alamofire.Manager(configuration: configuration) } }

Y mi propia versión

class APIManager { private var sessionManager = Alamofire.SessionManager() func requestCards(_ days_range: Int, success: ((_ cards: [CardModel]) -> Void)?, fail: ((_ error: Error) -> Void)?) { DispatchQueue.global(qos: .background).async { let parameters = ["example" : 1] let headers = ["AUTH" : "Example"] let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 10 self.sessionManager = Alamofire.SessionManager(configuration: configuration) self.sessionManager.request(URLs.cards.value, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON { (response) in switch response.result { case .success: //do json stuff guard let json = response.result.value as? [String : Any] else { return } guard let result = json["result"] as? [[String : Any]] else { return } let cards = Mapper<CardModel>().mapArray(JSONArray: result) debugPrint("cards", cards.count) success?(cards) case .failure(let error): if error._code == NSURLErrorTimedOut { //timeout here debugPrint("timeOut") } debugPrint("/n/ncard request failed with error:/n /(error)") fail?(error) } } } } }

También se puede hacer un manager para ello.

import Alamofire struct AlamofireAppManager { static let shared: SessionManager = { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 10 let sessionManager = Alamofire.SessionManager(configuration: configuration) return sessionManager }() }


Funciona para mí:

let url:String = "http://..." let request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("Kirk Hamet", forHTTPHeaderField:"name") request.timeoutInterval = 23 //Second Alamofire.request(request).responseJSON { response in if response.result.isSuccess == true { }else{ } }

Swift 4.1


Por favor intente esto:

let request = NSMutableURLRequest(url: URL(string: "")!) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.timeoutInterval = 10 // 10 secs let values = ["key": "value"] request.httpBody = try! JSONSerialization.data(withJSONObject: values, options: []) Alamofire.request(request as! URLRequestConvertible).responseJSON { response in // do whatever you want here }


Prueba esto:

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

Swift 3.0

let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 4 // seconds configuration.timeoutIntervalForResource = 4 self.alamoFireManager = Alamofire.SessionManager(configuration: configuration)


Tengo un código para Swift 2.3 Espero que te ayude, pruébalo.

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.timeoutIntervalForResource = 10800 // seconds configuration.timeoutIntervalForRequest = 10800 // seconds alamoFireManager = Alamofire.Manager(configuration: configuration)


Yo también tengo el mismo problema, creo que encontré la solución. Trate de declarar SessionManager? o en su caso alamofireManager en clase, fuera de la función

class ViewController: UIViewController { var alamoFireManager : SessionManager? // this line func alamofire(){ let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 10 configuration.timeoutIntervalForResource = 10 alamoFireManager = Alamofire.SessionManager(configuration: configuration) // not in this line alamoFireManager.request("my_url", method: .post, parameters: parameters).responseJSON { response in switch (response.result) { case .success: //Success.... break case .failure(let error): // failure... break } } } }


después de mucho intento lo hice con el siguiente:

var timeout = 300 // 5 minutes //Post values let parameters:Parameters = parameters //Server value let url:URL = (url) //Make the request let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForResource = TimeInterval(timeout) configuration.timeoutIntervalForRequest = TimeInterval(timeout) let sessionManager = Alamofire.SessionManager(configuration: configuration) sessionManager.request(url,parameters:parameters).validate(statusCode: 200..<300).responseJSON { response in print(response.request) // original URL request print(response.response) // URL response print(sessionManager.session.configuration.timeoutIntervalForRequest) // result of response time print(response.timeline.totalDuration) switch response.result { case .success: if let valJSON = response.result.value { //use your json result } case .failure (let error): print("/n/nAuth request failed with error:/n /(error)") } }

Espero que ayude ;)