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){
}
}
}
Êtes-vous sûr que le délai d'expiration de 4 secondes n'est pas appliqué? J'ai créé une expérience:
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)")
}
et la sortie de la console que j'ai obtenue:
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})
Les URL de mon exemple sont actuellement en baisse, je vais essayer de les remettre en ligne. Vous pouvez utiliser les URL de l'exemple pour tester. En définissant un nombre différent à la fin, vous pouvez modifier le délai d'expiration (en secondes).
J'ai utilisé la dernière version des cocoapods d'Alamofire.
Vous devez créer une variable globale pour le gestionnaire de demandes:
var alamoFireManager = Alamofire.Manager.sharedInstance
Et après avoir configuré les paramètres personnalisés:
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 4 // seconds
configuration.timeoutIntervalForResource = 4
self.alamoFireManager = Alamofire.Manager(configuration: configuration)
Voici le code Swift 3.0/Alamofire 4.0 pour obtenir un alamofireManager qui a un délai d'expiration de 5 secondes:
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForResource = 5 // seconds
let alamofireManager = Alamofire.SessionManager(configuration: configuration)
Je suppose que celui-ci fonctionne pour vous, notez que vous devez déclarer l'instance de Alamofire.Manager en dehors de la fonction, veuillez voir le code ci-dessous
//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
}
}
j'espère que cela vous aide
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){
}
}
}
Utilisation self.alamoFireManager!.request
dans la même fonction init, la temporisation n'est valable que pour la requête et non pour la fonction entière. peut-être que cela peut aider.
J'ai obtenu NSURLErrorDomain lorsque j'ai utilisé la méthode ci-dessus. Ceci est mon code (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){
}