IOS 7の新しいNSURLSessionDataTask
を使用して、次のようにデータを取得しています。
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:
request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
//
}];
エラー"The request timed out"
(NSURLErrorDomain
Code = -1001
内)を回避するために、タイムアウト値を増やすにはどうすればよいですか?
NSURLSessionConfiguration のドキュメントを確認しましたが、タイムアウト値を設定する方法が見つかりませんでした。
ご協力ありがとうございました!
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
およびtimeoutIntervalForResource
は、リクエストとリソースのタイムアウト間隔を指定します。
timeoutIntervalForRequest
-追加データを待機するときに使用するタイムアウト間隔。この値に関連付けられたタイマーは、新しいデータが到着するたびにリセットされます。要求タイマーが新しいデータを受信せずに指定された間隔に達すると、タイムアウトをトリガーします。
timeoutIntervalForResource
-リソース要求が許可される最大時間。この値は、リソース全体が転送されるまで待機する時間を制御します。リソースタイマーは、要求が開始されると起動し、要求が完了するか、このタイムアウト間隔に達するかのいずれか早い方までカウントします。
Swift開発者がここに来る場合
これを行うには、使用する必要があります
let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
urlconfig.timeoutIntervalForRequest = 12
urlconfig.timeoutIntervalForResource = 12
self.session = NSURLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil)
Swiftで3.タイムアウト15秒。
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = TimeInterval(15)
configuration.timeoutIntervalForResource = TimeInterval(15)
let session = URLSession(configuration: configuration)
NSURLSessionConfigurationには、プロパティtimeoutIntervalForRequestが含まれます。
@property NSTimeInterval timeoutIntervalForRequest
タイムアウト間隔を制御します。要求が開始された後のタイムアウト用のtimeoutIntervalForResourceもあります。
Swift 3.0では、使用する必要があります
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()
}
Swift 4の場合:
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = TimeInterval(15)
config.timeoutIntervalForResource = TimeInterval(15)
let urlSession = URLSession(configuration: config)
TimeoutIntervalForRequestは、この構成に基づくセッション内のすべてのタスク用です。 timeoutIntervalForResourceは、この構成に基づくセッション内のすべてのタスク用です。
私の場合、間違ったクラスのタイムアウトを増やしていました。タイムアウトエラーは、RLSessionではなくRLRequestのタイムアウトを増やすことで解決しました。
var request = URLRequest(url: url)
request.timeoutInterval = 30