删除UIWebView的内部缓存

时间:2013-10-01 10:19:26

标签: ios cocoa-touch caching uiwebview nsurlcache

我在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,但缓存仍在那里。

2 个答案:

答案 0 :(得分:21)

看来这里发生的是重新加载实际的HTML文件,但不一定会重新加载该页面中的资源。

我看到的一个可能的解决方案是在URL的末尾附加一个查询参数。例如:

NSString *testURL = [NSString stringWithFormat:@"%@?t=%@", url, randQuery];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:testURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]];

您可以在其中生成random alphanumeric string作为randQuery查询参数,或者保持持久计数并且只是计数。

这应该强制UIWebView从远程资源加载。

答案 1 :(得分:7)

我遇到了同样的问题并将HTTPShouldHandleCookies属性设置为NO修复了我的问题。

例如:

NSMutableURLRequest  *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]];

[request setHTTPShouldHandleCookies:NO];

[webView loadRequest: request];

希望得到这个帮助。