如何使特定URL的iOS缓存无效?

时间:2014-06-30 14:04:47

标签: ios caching nsurlsession nsurlcache

使用NSURLSession的默认缓存,如何使特定网址的缓存无效?

我注意到NSURLCache的{​​{1}}方法,但这需要一个removeCachedResponseForRequest:个对象,而我原来的请求并不存在这个对象。我是否需要在创建它们时存储它们,以便我可以将它们传递回NSURLRequest,或者我可以创建一个具有相应URL的新URL,即使它没有&# 39; t与原始字段具有相同的标题字段和其他属性吗?

3 个答案:

答案 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)

以下是为我工作的内容:

request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

以下列出了有关chache政策的所有选项,因此您可以找到更适合您需求的选项:

enter image description here

使用Swift 2.2和Xcode 7.3