Ich verwende die neue NSURLSessionDataTask
von iOS 7, um Daten wie folgt abzurufen:
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:
request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
//
}];
Wie kann ich die Timeout-Werte erhöhen, um den Fehler "The request timed out"
zu vermeiden (in NSURLErrorDomain
Code = -1001
)?
Ich habe die Dokumentation für NSURLSessionConfiguration geprüft, konnte aber den Timeout-Wert nicht festlegen.
Danke für deine Hilfe!
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
und timeoutIntervalForResource
geben das Timeout-Intervall für die Anforderung sowie die Ressource an.
timeoutIntervalForRequest
- Das Zeitlimit, das beim Warten verwendet werden soll für zusätzliche Daten. Der diesem Wert zugeordnete Timer wird zurückgesetzt wann immer neue Daten ankommen. Wenn der Anforderungszeitgeber die .__ erreicht. angegebenes Intervall ohne neue Daten zu empfangen, löst es eine .__ aus. Auszeit.
timeoutIntervalForResource
- Die maximale Zeit, die ein Ressourcenanforderung sollte zulässig sein. Dieser Wert steuert, wie lange warten, bis eine gesamte Ressource übertragen wurde, bevor sie aufgibt. Das Der Ressource-Timer startet, wenn die Anforderung initiiert wird, und zählt bis Entweder ist die Anforderung abgeschlossen oder dieses Zeitlimit ist erreicht. welches auch immer zuerst kommt.
Basierend auf NSURLSessionConfiguration-Klassenreferenz
Falls Swift-Entwickler hierher kommt
dazu müssen Sie verwenden
let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
urlconfig.timeoutIntervalForRequest = 12
urlconfig.timeoutIntervalForResource = 12
self.session = NSURLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil)
In Swift 3. Timeout 15 Sekunden.
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = TimeInterval(15)
configuration.timeoutIntervalForResource = TimeInterval(15)
let session = URLSession(configuration: configuration)
NSURLSessionConfiguration enthält die Eigenschaft timeoutIntervalForRequest:
@property NSTimeInterval timeoutIntervalForRequest
um das Timeout-Intervall zu steuern. Es gibt auch timeoutIntervalForResource für das Timeout, nachdem die Anforderung initiiert wurde.
In Swift 3.0 müssen Sie verwenden
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()
}
Für Swift 4:
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = TimeInterval(15)
config.timeoutIntervalForResource = TimeInterval(15)
let urlSession = URLSession(configuration: config)
TimeoutIntervalForRequest gilt für alle Tasks in Sitzungen, die auf dieser Konfiguration basieren. Die timeoutIntervalForResource ist für alle Tasks in Sitzungen, die auf dieser Konfiguration basieren.
In meinem Fall erhöhte ich das Timeout der falschen Klasse. Mein Timeout-Fehler wurde behoben, indem das Timeout der URLRequest nicht der URLSession erhöht wurde.
var request = URLRequest(url: url)
request.timeoutInterval = 30