使用NSURLSession
的默认缓存,如何使特定网址的缓存无效?
我注意到NSURLCache
的{{1}}方法,但这需要一个removeCachedResponseForRequest:
个对象,而我原来的请求并不存在这个对象。我是否需要在创建它们时存储它们,以便我可以将它们传递回NSURLRequest
,或者我可以创建一个具有相应URL的新URL,即使它没有&# 39; t与原始字段具有相同的标题字段和其他属性吗?
答案 0 :(得分:5)
如果您想要更进一步,可以重置您要强制重新加载的网址请求的缓存响应。执行以下操作:
let newResponse = NSHTTPURLResponse(URL: urlrequest.URL!, statusCode: 200, HTTPVersion: "1.1", headerFields: ["Cache-Control":"max-age=0"])
let cachedResponse = NSCachedURLResponse(response: newResponse!, data: NSData())
NSURLCache.sharedURLCache().storeCachedResponse(cachedResponse, forRequest: urlrequest)
由于响应的缓存控制标头hax的最大年龄为0(强制),当您执行此请求时,将永远不会返回响应。
您的答案可以强制执行单个请求,但如果您希望有两个版本的请求,一个强制,另一个依赖缓存的响应,则需要在强制请求后删除缓存的请求。
答案 1 :(得分:3)
解决方案证明不会使现有网址的缓存无效,而是设置:
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
当您对资源进行下一次请求时,您知道该资源无效。有些选项可以忽略本地缓存,或者请求上游代理也忽略它们的缓存。有关详细信息,请参阅NSURLRequest / NSMutableURLRequest文档。
答案 2 :(得分:1)