【发布时间】:2013-10-07 11:09:46
【问题描述】:
我在UIWebView 中展示了一个网络应用程序,有时页面的内容会发生变化。内容更改后,应用程序会清除缓存。但是当我转到我之前访问过的页面时,UIWebView 不会发送 HTTP GET 请求,而是从缓存加载,即使我已经禁用了缓存,如下所示:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
最初我正在使用 cachePolicy cachePolicy:NSURLRequestReturnCacheDataElseLoad 加载请求。
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:myURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]];
UIWebView 有某种内部缓存。已经访问过的页面将从这个内部缓存中加载,而不是通过NSURLCache,并且也没有发送请求。
有什么办法可以清除UIWebView的内部缓存吗?我什至正在重新创建UIWebView,但缓存仍然存在。
【问题讨论】:
-
你有没有在这里尝试解决方案:stackoverflow.com/a/14096331/1749367
-
是的,这些解决方案中的任何一个都无法成功实现我想要完成的目标。
-
我找到了一种解决方法 - 将 HTTP 响应标头中的 Cache-Control 属性设置为 max-age=0。然后每次都会为资源发送一个请求。解决此问题的一种方法可能是跟踪自上次清除缓存后是否已请求文件,并在上次清除后第二次加载资源时将 max-age 设置为另一个值(例如 3600)。跨度>
-
刚刚意识到这种解决方法不起作用,因为当资源被缓存时,它不会在缓存清除后重新加载,所以我失去了对它的控制。
-
@Ravi 不,我的结论是除了重新启动应用程序之外没有办法清除缓存。我最终是这样做的。当必须清除缓存时,会要求用户重新启动应用程序。他们点击一个按钮,应用程序就会为用户自行退出。
标签: ios cocoa-touch caching uiwebview nsurlcache