ios - finished - NSURLSession: ¿cómo aumentar el tiempo de espera para las solicitudes de URL?
nsurlconnection error codes (6)
ObjC
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.timeoutIntervalForRequest = 30.0;
sessionConfig.timeoutIntervalForResource = 60.0;
Rápido
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)
Qué dicen
timeoutIntervalForRequest
y timeoutIntervalForResource
especifican el intervalo de tiempo de espera para la solicitud y el recurso.
timeoutIntervalForRequest
- El intervalo de tiempo de espera para usar cuando se esperan datos adicionales. El temporizador asociado con este valor se restablece cada vez que llegan nuevos datos. Cuando el temporizador de solicitud alcanza el intervalo especificado sin recibir ningún dato nuevo, desencadena un tiempo de espera excedido.
timeoutIntervalForResource
: la cantidad máxima de tiempo que una solicitud de recursos debe permitirse. Este valor controla cuánto tiempo esperar para que un recurso completo se transfiera antes de darse por vencido. El temporizador de recursos se inicia cuando se inicia la solicitud y cuenta hasta que se completa la solicitud o se alcanza este intervalo de tiempo de espera, lo que ocurra primero.
Estoy utilizando el nuevo NSURLSessionDataTask
iOS 7 para recuperar datos de la siguiente manera:
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:
request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
//
}];
¿Cómo puedo aumentar los valores de tiempo de espera para evitar el error "The request timed out"
(en NSURLErrorDomain
Code = -1001
)?
NSURLSessionConfiguration la documentación de NSURLSessionConfiguration pero no encontré la manera de establecer el valor de tiempo de espera.
¡Gracias por tu ayuda!
En SWIFT 3.0, debe usar
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()
}
En caso de que el desarrollador de Swift llegue aquí
para hacer esto, necesitas usar
let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
urlconfig.timeoutIntervalForRequest = 12
urlconfig.timeoutIntervalForResource = 12
self.session = NSURLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil)
En veloz 3. agote los 15 segundos.
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = TimeInterval(15)
configuration.timeoutIntervalForResource = TimeInterval(15)
let session = URLSession(configuration: configuration)
NSURLSessionConfiguration incluye la propiedad timeoutIntervalForRequest:
@property NSTimeInterval timeoutIntervalForRequest
para controlar el intervalo de tiempo de espera. También hay timeoutIntervalForResource para el tiempo de espera después de que se inicia la solicitud.
Para Swift 4:
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = TimeInterval(15)
config.timeoutIntervalForResource = TimeInterval(15)
let urlSession = URLSession(configuration: config)
El timeoutIntervalForRequest es para todas las tareas dentro de sesiones basadas en esta configuración. El timeoutIntervalForResource es para todas las tareas dentro de sesiones basadas en esta configuración.