我需要UIWebView来显示一些本地的.webarchive文件。但是那里的图像具有相同的名称,因此UIWebView始终只显示一个图像。如何清除缓存?
提前致谢
答案 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];
}