gpt4 book ai didi

ios - 请求超时 NSURLSession

转载 作者:可可西里 更新时间:2023-11-01 00:23:05 26 4
gpt4 key购买 nike

你好,我使用下面的代码向服务器发送请求。如何在此函数中添加超时

static func postToServer(url:String,var params:Dictionary<String,NSObject>, completionHandler: (NSDictionary?, String?) -> Void ) -> NSURLSessionTask {


let request = NSMutableURLRequest(URL: NSURL(string: url)!)


let session = NSURLSession.sharedSession()

request.HTTPMethod = "POST"

if(params["data"] != "get"){
do {

let data = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted)

let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)!
print("dataString is \(dataString)")

request.HTTPBody = data


} catch {
//handle error. Probably return or mark function as throws
print("error is \(error)")
//return
}

}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let task = session.dataTaskWithRequest(request) {data, response, error -> Void in
// handle error

guard error == nil else { return }
request.timeoutInterval = 10


print("Response: \(response)")
let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)
completionHandler(nil,"Body: \(strData!)")
//print("Body: \(strData!)")

let json: NSDictionary?
do {
json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
} catch let dataError {
// Did the JSONObjectWithData constructor return an error? If so, log the error to the console
print(dataError)
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
completionHandler(nil,"Body: \(jsonStr!)")

// return or throw?
return
}


// The JSONObjectWithData constructor didn't return an error. But, we should still
// check and make sure that json has a value using optional binding.
if let parseJSON = json {
// Okay, the parsedJSON is here, let's get the value for 'success' out of it

completionHandler(parseJSON,nil)
//let success = parseJSON["success"] as? Int
//print("Succes: \(success)")
}
else {
// Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Errors could not parse JSON: \(jsonStr)")
completionHandler(nil,"Body: \(jsonStr!)")
}

}

task.resume()
return task
}

我也做了一些搜索,我开始知道使用这个功能

let request = NSURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)

而不是这个

let request = NSMutableURLRequest(URL: NSURL(string: url)!)

但问题是如果我使用上面的函数那么我就不能设置这些变量

request.HTTPBody = data
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

请有人建议我如何在我的函数中添加超时的正确解决方案

最佳答案

您不能修改您的请求,因为出于某种原因您使用了不可变选项。由于 NSMutableURLRequest 是 NSURLRequest 的子类,您可以使用完全相同的初始化程序 init(URL:cachePolicy:timeoutInterval:) 来创建一个可变实例并设置默认超时。然后根据需要配置(改变)这个请求。

let request = NSMutableURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)

关于ios - 请求超时 NSURLSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35426981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com