【发布时间】:2016-10-21 13:27:38
【问题描述】:
我目前在尝试将数据发布到我的网络服务器时遇到了一些有关 URLSession 的问题。然而,这完美地工作。似乎不起作用的是我设置的超时。这对我的整个应用程序来说非常重要,因为我不希望用户永远“加载”,而没有任何类型的错误消息。这是我的代码:
var request = URLRequest(url: URL(string: "https://www.mywebsite.com/file.php")!, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 20)
let urlconfig = URLSessionConfiguration.default
urlconfig.timeoutIntervalForRequest = 20
urlconfig.timeoutIntervalForResource = 20
request.httpMethod = "POST"
let session = URLSession(configuration: urlconfig, delegate: self, delegateQueue: nil)//URLSession.shared
let body = "receiver=\(receiverID)"
request.httpBody = body.data(using: String.Encoding.utf8, allowLossyConversion: true)
request.timeoutInterval = 20
session.dataTask(with: request) {data, response, err in
if err == nil {
do {
let jsonResult:NSDictionary? = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
let jsonComp = jsonResult?.value(forKey: "completion") as! String
if jsonComp == "done" {
} else {
}
}catch{}
} else {
}
}.resume()
我只想将超时设置为 20 秒,然后返回错误(警报)。我怎样才能做到这一点?我觉得我已经尝试了所有可能的方法,只是通过配置URLSessionConfiguration,并设置.timeoutInterval。
我们将不胜感激!
【问题讨论】:
-
很明显这个问题是关于 Swift 的标签。标题中包含“Swift”有什么意义?
-
@LeoNatan 对我的帖子进行 -1 是不必要的,因为您认为我将“Swift”放在标题中是错误的。但是要回答您的问题,这仅仅是因为我只想指出该语言是 Swift。我经常做的事情。
-
你已经指出它在 Swift 中——你有
swift和swift3标签。此外,这是一个框架问题。您的问题与 Swift 无关。如果是 ObjC 形式的帮助,你真的不想接受吗? -
@LeoNatan 好的,从现在开始我会避免这样做。
标签: swift swift3 nsurlsession connection-timeout urlrequest