如何清除UIWebView缓存?

时间:2010-03-26 13:13:44

标签: iphone uiwebview

我需要UIWebView来显示一些本地的.webarchive文件。但是那里的图像具有相同的名称,因此UIWebView始终只显示一个图像。如何清除缓存?

提前致谢

9 个答案:

答案 0 :(得分:32)

// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];

答案 1 :(得分:17)

NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];

[webView loadRequest:request];

(现在已修复拼写错误)

答案 2 :(得分:11)

我自己有这个问题,脚本和css文件被缓存。

我的解决方案是在src url上放置缓存清除参数:

<script src='myurl?t=1234'> ...

每次加载页面时t = 1234都会改变。

答案 3 :(得分:11)

使用

[[NSURLCache sharedURLCache] removeAllCachedResponses];

在进行调用之前或加载视图控制器时,这是一个静态函数,用于删除响应的所有缓存数据。 只使用了cachePolicy,我没看到,我看到uiwebview可以刷新html文档,但不能刷新CSS,JS或图像等链接文档。

我尝试这个解决方案,它的工作原理。

 if (lastReq){
    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:lastReq];
    [[NSURLCache sharedURLCache] removeAllCachedResponses];

}

lastReq=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:localUrl]
                                   cachePolicy:NSURLRequestReloadIgnoringCacheData
                               timeoutInterval:10000];
[lastReq setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

[self.mainWebView loadRequest:lastReq];

- 首先,我删除了最后一个请求的缓存并调用删除所有其他缓存(我认为这不是那么重要) - 然后我创建了一个nsurlrequest并忽略了LocalCacheData - 最后,加载新请求

我检查它并重新加载所有文件(html,css,js和图像)。

答案 4 :(得分:5)

//to prevent internal caching of webpages in application
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
sharedCache = nil;

尝试使用此功能。它将清除应用程序的URL缓存。

答案 5 :(得分:4)

我正在与一些设计师一起编辑应用程序中某些Web视图使用的CSS文件。他们抱怨样式表的更改没有反映在应用程序中,并且Charles的一些调试确认它们没有被重新加载。我似乎在StackOverflow上尝试了每一个答案都无济于事。

最后诀窍是创建一个覆盖NSURLCache的{​​{1}}子类

-cachedResponseForRequest:

然后我用合理的内存和磁盘容量安装它:

- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request
{
    if ([[[[request URL] absoluteString] pathExtension] caseInsensitiveCompare:@"css"] == NSOrderedSame)
        return nil;
    else
        return [super cachedResponseForRequest:request];
}

NSURLCache *currentCache = [NSURLCache sharedURLCache]; NSString *cachePath = [cachesDirectory() stringByAppendingPathComponent:@"DebugCache"]; DebugURLCache *cache = [[DebugURLCache alloc] initWithMemoryCapacity:currentCache.memoryCapacity diskCapacity:currentCache.diskCapacity diskPath:cachePath]; [NSURLCache setSharedURLCache:cache]; [cache release]; 是一个在iOS上的应用程序目录下返回cachesDirectory()的函数。

正如您所知,我只在调试配置中使用它(使用Additional Preprocessor Flags构建设置和一些#ifdefs)。

答案 6 :(得分:1)

对于swift 3

//to remove cache from UIWebview
URLCache.shared.removeAllCachedResponses()
    if let cookies = HTTPCookieStorage.shared.cookies {
        for cookie in cookies {
            HTTPCookieStorage.shared.deleteCookie(cookie)
        }
    }

答案 7 :(得分:0)

使用以下代码:

NSString *cacheDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  [[NSFileManager defaultManager]removeItemAtPath:cacheDir error:nil];

答案 8 :(得分:0)

这就像一个魅力!

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

//Clear All Cookies
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}