我正在快速发出 HTTP get 请求,但由于某种原因我收到了过时的响应。我将 Postman 中的响应与我在 Xcode 中打印的响应进行了比较,我得到了这个......
Postman 中的响应 header :
在 Xcode 控制台中打印的响应 header :
请参阅以绿色突出显示的部分,两个调用是同时进行的。这是我项目的实时 API,由于当前实时数据没有变化,我没有显示 JSON 响应。但是正如您在响应 header 中看到的那样,Postman 和 Xcode 中字段“Date”的值是不同的。当我在 Postman 中执行此操作时,它每次都会给我新的响应。但是在 Xcode 中,我整天都得到相同的响应。我不知道为什么会这样。在删除模拟器的内容(或从模拟器中删除应用程序)并再次重新安装项目后,它给了我一个新的更新响应。但它再次重复...
RequestManager 类中的代码:
import Foundation
class RequestManager {
class func callTheGetAPI(urlString: String, closure: @escaping (Data?)->Void) {
let url = URL.init(string: urlString)
var urlRequest = URLRequest(url: url!)
urlRequest.httpMethod = "GET"
urlRequest.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if (error != nil) {
print(error!.localizedDescription)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse!.allHeaderFields)
closure(data)
}
}
dataTask.resume()
}
}
我的 ViewController 中的代码:
override func viewDidLoad() {
super.viewDidLoad()
getRecommendedData()
}
func getRecommendedData() {
let url = APIManager.API_01
RequestManager.callTheGetAPI(urlString: url, closure: { response in
do {
if (try JSONSerialization.jsonObject(with: response!, options: .mutableContainers) as? [[String : Any]]) != nil{
// print(json)
}
} catch let error {
print(error.localizedDescription)
}
})
}
这就是我所有的人..如果有人知道发生了什么或者我做错了什么..请帮助..
最佳答案
替换下一行
var urlRequest = URLRequest(url: url!)
与
var urlRequest = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 60)
来自文档reloadIgnoringCacheData:指定 URL 加载的数据应该从原始源加载。不 现有的本地缓存数据,无论其新鲜度或有效性如何, 应用于满足 URL 加载请求。
默认情况下它使用缓存。
关于ios - API 调用 swift 给出过时的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944048/