J'utilise la nouvelle variable NSURLSessionDataTask
d'iOS 7 pour récupérer les données comme suit:
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:
request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
//
}];
Comment puis-je augmenter les valeurs de délai d'attente pour éviter l'erreur "The request timed out"
(dans NSURLErrorDomain
Code = -1001
)?
J'ai vérifié la documentation de NSURLSessionConfiguration mais je n'ai pas trouvé de moyen de définir la valeur du délai d'attente.
Merci de votre aide!
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.timeoutIntervalForRequest = 30.0;
sessionConfig.timeoutIntervalForResource = 60.0;
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)
timeoutIntervalForRequest
et timeoutIntervalForResource
spécifient l'intervalle de temporisation pour la demande ainsi que pour la ressource.
timeoutIntervalForRequest
- Intervalle de temporisation à utiliser lors de l'attente pour des données supplémentaires. Le temporisateur associé à cette valeur est réinitialisé chaque fois que de nouvelles données arrivent. Lorsque le temporisateur de demande atteint le intervalle spécifié sans recevoir de nouvelles données, il déclenche un temps libre.
timeoutIntervalForResource
- La durée maximale pendant laquelle un demande de ressource devrait être autorisé à prendre. Cette valeur contrôle comment longtemps à attendre pour une ressource entière à transférer avant d'abandonner. Le le temporisateur de ressource démarre lorsque la demande est lancée et compte jusqu'à la demande est terminée ou cet intervalle de temps est atteint, peu importe lequel vient en premier.
Si le développeur Swift vient ici
pour ce faire, vous devez utiliser
let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
urlconfig.timeoutIntervalForRequest = 12
urlconfig.timeoutIntervalForResource = 12
self.session = NSURLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil)
Dans Swift 3. délai d'attente 15 secondes.
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = TimeInterval(15)
configuration.timeoutIntervalForResource = TimeInterval(15)
let session = URLSession(configuration: configuration)
NSURLSessionConfiguration inclut la propriété timeoutIntervalForRequest:
@property NSTimeInterval timeoutIntervalForRequest
pour contrôler l'intervalle de temporisation. Il existe également timeoutIntervalForResource pour le délai d'attente après le lancement de la demande.
Dans Swift 3.0, vous devez utiliser
if let cleanURLString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed),
let theURL: Foundation.URL = Foundation.URL(string: cleanURLString) {
var task:URLSessionDataTask?
let urlconfig = URLSessionConfiguration.default
urlconfig.timeoutIntervalForRequest = 20
urlconfig.timeoutIntervalForResource = 60
let session = Foundation.URLSession(configuration: urlconfig, delegate: self, delegateQueue: OperationQueue.main)
let request = URLRequest(url: theURL)
request.httpMethod = "POST"
request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
let paramString = YourParameterString
request.httpBody = paramString.data(using: String.Encoding.utf8)
task = session.dataTask(with: request) {
(data, response, error) in
// Do here
})
dataTask.resume()
}
Pour Swift 4:
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = TimeInterval(15)
config.timeoutIntervalForResource = TimeInterval(15)
let urlSession = URLSession(configuration: config)
TimeoutIntervalForRequest concerne toutes les tâches des sessions basées sur cette configuration . timeoutIntervalForResource concerne toutes les tâches des sessions basées sur cette configuration.
Dans mon cas, j'augmentais le délai d'attente de la mauvaise classe. Mon erreur de délai d'attente a été résolue en augmentant le délai d'attente de URLRequest pas du URLSession
var request = URLRequest(url: url)
request.timeoutInterval = 30