在iOS 10上的swift 3中指定的时间间隔后,URLSession未获得超时
我正试图通过urlsession在swift3中命中一个Json请求。请求在10秒后未超时在iOS 10上的swift 3中指定的时间间隔后,URLSession未获得超时,ios,swift,nsurlsession,Ios,Swift,Nsurlsession,我正试图通过urlsession在swift3中命中一个Json请求。请求在10秒后未超时 let request = NSMutableURLRequest(url: NSURL(string:url )! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval
let request = NSMutableURLRequest(url: NSURL(string:url )! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0 )
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = RequestBody
let configuration =
URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 10
configuration.timeoutIntervalForResource = 10
let session = URLSession(configuration: configuration, delegate: self as? URLSessionDelegate, delegateQueue:OperationQueue.main)
let dataTask = session.dataTask(with: request as URLRequest) {
(data, response, error) in...
}
问题是您从未真正启动网络请求。 您需要调用dataTask.resume()来实际启动请求。这需要在关闭后立即发生,请参见下面的代码:
guard let url = URL(string: urlString) else { return }
let request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0 )
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = RequestBody
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest) {
(data, response, error) in...
}
dataTask.resume()
@DávidPászor为错误的标题感到抱歉。我使用的是URLSession Only,但我仍然要记住,您设置的超时是空闲超时,只有当请求在n秒以上没有数据时才会触发。如果应用程序仍在缓慢获取数据,则计时器将继续重置。顺便说一句,强烈反对设置如此短的超时。蜂窝网络通常速度非常慢,因此,除非您正在做一些非常不寻常的事情,否则这样做几乎肯定会给您的用户带来严重的问题。这么短的超时时间,你想完成什么?有了这些信息可能会帮助我们推荐更好的方法来解决这个问题。我在代码中使用了data task.resume(),我没有在我的问题上添加语法,但我没有超时