gpt4 book ai didi

swift - 防止 NSURLSession 缓存响应

转载 作者:IT王子 更新时间:2023-10-29 05:12:25 26 4
gpt4 key购买 nike

为什么要缓存响应。它返回以前获取的响应。如果关闭网络连接,它甚至可以工作。重置 iOS 模拟器似乎也没有用。发出请求,然后再次使用离线互联网确实有效(缓存)。

public let urlSession: NSURLSession

public init()
{
// ...

var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.requestCachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
urlSession = NSURLSession(configuration: configuration)
}

func makeRequest(path: String, httpMethod:String, body:String?, baseUrl: String?, headers:[String:String]=[:], callback: JsonRequestCallback)
{
let urlString = (baseUrl ?? customOAuth2Manager.API_URL) + path
let url = NSURL(string: urlString)
let request = oauthInstance.request(forURL: url!)

request.HTTPMethod = httpMethod
self.customOAuth2Manager.setupRequest(request)

for (key, value) in headers {
request.setValue(value, forHTTPHeaderField:key)
}

if let body = body where body != "" {
let postData = (body as NSString).dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = postData
}

let task = urlSession.dataTaskWithRequest(request) { data, response, error in
self.parseData(data, response:response, error:error, body:body, callback: callback)
}
task.resume()
}

更新

我设法通过从 AppDelegate 中的 didFinishLaunching 调用这段代码来解决它:

func removeUrlCache()
{
NSURLCache.setSharedURLCache(NSURLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil))
}

但是,我仍然很好奇为什么我的原始代码不起作用。为所有应用禁用缓存来解决我的问题也感觉有点难看。

最佳答案

感谢您的提问。它让我走上了正确的道路。

NSURLCache.sharedURLCache() 有更多可能性,您不需要为此更改内存容量和磁盘容量。

您可以删除所有缓存的响应。 对我有用。

URLCache.shared.removeAllCachedResponses()

或者您可以删除单个响应的缓存。 不适用于我的 iOS 9。

let request = URLRequest(url: URL(string: url)!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 10)
URLCache.shared.removeCachedResponse(for: request)

//Do your request here

希望对大家有所帮助!

编辑:不幸的是,NSURLCache.sharedURLCache().removeCachedResponseForRequest(request) 对我不起作用

我的替代方案是:我将其用于拉动刷新并跟踪上次更新日期。所以我使用了以下代码:

 URLCache.shared.removeCachedResponses(since: lateUpdate)

但出于某种原因,这对以太币不起作用。

从 iOS 8 开始,单个缓存删除方法似乎被破坏了:https://stackoverflow.com/a/26343653/2826164

2019-05-24,更新到 Swift 5。

关于swift - 防止 NSURLSession 缓存响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324394/

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