Ios 使用本地映像文件时清除UIWebView缓存

Ios 使用本地映像文件时清除UIWebView缓存,ios,objective-c,caching,uiwebview,nsdocument,Ios,Objective C,Caching,Uiwebview,Nsdocument,我使用UIWebView加载一个本地html,Objc创建的html中有一个PNG文件 修改PNG文件后,我在UIWebView中重新加载html,但图像不变。但是,如果我退出应用程序并重新打开,图像文件将更改为新文件。 我已经用Finder检查了文档中的PNG文件,所以我确信它已经被修改了,但是旧的仍然在UIWebView中 因此,由于我认为这是UIWebView缓存问题,我尝试了: [[NSURLCache sharedullcache]移除所有缓存响应] [[u webView load

我使用UIWebView加载一个本地html,Objc创建的html中有一个PNG文件

修改PNG文件后,我在UIWebView中重新加载html,但图像不变。但是,如果我退出应用程序并重新打开,图像文件将更改为新文件。

我已经用Finder检查了文档中的PNG文件,所以我确信它已经被修改了,但是旧的仍然在UIWebView中

因此,由于我认为这是UIWebView缓存问题,我尝试了:

  • [[NSURLCache sharedullcache]移除所有缓存响应]

  • [[u webView loadRequest:[nsurlRequestWithURL:[NSURL fileURLWithPath:url isDirectory:NO]缓存策略:nsurlRequestReloadIgnoringLocal和远程缓存数据timeoutInterval:1]]
    NSURLRequestReloadIgnoringCacheData

它们都不起作用,我也不能更改文件名,因为PNG文件在很多地方使用(其他html和objc代码)

我也试过:
some.png?r=randomNumber
但它无法显示


在本地html中使用本地图像文件时,如何清除UIWebView缓存?

您可以在AppDelegate.m中尝试此操作

+(void)initialize {
  [[NSURLCache sharedURLCache] setDiskCapacity:0];
  [[NSURLCache sharedURLCache] setMemoryCapacity:0];
}

如果html没有更改,并且唯一的更改是在图像中,则应使用
UIWebView
reload
消息,而不是再次加载请求

大概是这样的:

- (void)reloadWebView:(id)sender
{
    if (self.loaded) {
        [self.webView reload];
    } else {
        NSString *html = [[NSBundle mainBundle] pathForResource:@"web" ofType:@"html"];
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:html]];
        [self.webView loadRequest:request];
        self.loaded = YES;
    }
}
[NSURL URLWithString:[[NSString stringWithFormat:@"%@/index.html?pizza=%f", webDirectoryPath, [[NSDate date] timeIntervalSince1970]]

您甚至不需要对缓存进行任何操作。

除了在每次访问时重命名每个文件之外,我只看到一件事可以做到这一点,那就是使用javascript修改HTML,在图像url上添加时间戳,从而诱使webview认为它是不同的文件。图像(通常)加载相同的内容,无论您在之后放置了什么?在他们的url中。我认为这比每次加载web视图时重命名每个文件更容易。类似这样的内容(使用jQuery):


我现在可以修改所有本地文件,每次出现webview时,更改都会通过。

对我不起作用。本地映像永远不会更新。我也有同样的症状,当我启动应用程序并重新启动时,图像会被更新。我认为当你处理远程数据而不是本地数据时,它可能会有所帮助。当您刚刚加载本地html文件,并且该文件保持不变时,不会通过重复请求实际重新加载视图内容。Elio.d的回答真的为您解决了这个问题吗?不适合我。我也有这个问题,需要解决!!!!-开始悬赏!事实并非如此,我们询问如何清除缓存的唯一原因是因为我们已经重新加载了html文件,并且图像没有更改。您正在使用
loadRequest
方法,该方法实际上可以清除缓存。。。我使用的是
loadHTML
方法,该方法无法清除缓存(因为我的html文件是以字符串形式当场生成的)。。。我想我必须将字符串保存为包中的.html文件,然后使用
loadRequest
和它的clear cache方法。。。即使使用
loadRequest
的清除缓存方法。。。(
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
)它仍然没有从应用程序内部更新捆绑包中更改的png文件!关键点在
重新加载
消息中。这不是一个与缓存相关的问题,因为在我的测试项目中,我没有对缓存做任何事情,所有的工作都很好。当我用新图像替换旧图像,然后调用
reload
时,webview中的图像已更改。我认为这也与你加载数据的方式无关。。但是应该检查一下。不幸的是,我已经尝试过重新加载,但没有成功/:到目前为止,我只是在每次更改时重命名所有108个图像,然后在整个项目中更新这些新的图像名称引用,然后重新加载所有图像,并用旧名称删除旧图像(每个图像都只有8x8像素,所以不会太差)嗯,我做了测试,不得不说你是对的。当html从字符串加载时,WebView不会刷新图像。这是非常奇怪的行为。因为当你将文件加载到WebView时,它会根据需要工作。我认为最好使用这种方法,而不是使用你的方法。将字符串保存在
Temp
目录和ju中会更容易当您更改图像时,st重新加载网络视图。3年多后仍然发生这种情况,您挽救了这一天!
[NSURL URLWithString:[[NSString stringWithFormat:@"%@/index.html?pizza=%f", webDirectoryPath, [[NSDate date] timeIntervalSince1970]]