【问题标题】:Image caching problem in webViewwebView中的图像缓存问题
【发布时间】:2011-09-22 13:22:05
【问题描述】:
我正在制作一个 iPhone 应用程序。
我正在从图表中创建一个图像,然后将其嵌入到 HTML 中,以使用loadHTMLString:baseURL: 方法将图像显示到 webView 中。
现在图像第一次正常显示。
当我对图表进行更改并重新捕获图像时,它仍然显示旧图像。
所以基本上它不会更新图像。图像名称相同,旧图像已从 Documents 目录中删除,但仍以某种方式显示旧图像。
如何在 webView 中删除这种图像缓存?
【问题讨论】:
标签:
iphone
objective-c
cocoa-touch
ios4
uiwebview
【解决方案2】:
我解决这个问题的方法是添加时间戳和图像名称,这样每次生成的图像名称都是唯一的。这样它总是能获取正确的图像。
希望这对某人有所帮助。
【解决方案3】:
是 webkit 中的缓存导致了你的问题。
要解决这个问题,您可能需要对 http 协议进行一些操作。也就是说,你应该正确设置你的http响应的缓存相关的header,比如Expires、Age、Cache-Control、Last-Modified。之后,webkit 将不再为你缓存图片。
如果你没有权限修改服务器上的header,你可以使用NSURLProtocol在响应发送到webkit之前拦截它。
关键代码:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSHTTPURLResponse *httpRes = (NSHTTPURLResponse *)response;
NSMutableDictionary *headers = [[httpRes allHeaderFields] mutableCopy];
[headers removeObjectForKey:@"Expires"];
[headers removeObjectForKey:@"Cache-Control"];
[headers removeObjectForKey:@"Age"];
[headers removeObjectForKey:@"Last-Modified"];
NSHTTPURLResponse *newRes = [[NSHTTPURLResponse alloc] initWithURL:[[connection originalRequest] URL]
statusCode:[httpRes statusCode]
HTTPVersion:@"HTTP/1.1"
headerFields:[headers copy]
];
[self.client URLProtocol:self didReceiveResponse:[newRes copy] cacheStoragePolicy:NSURLCacheStorageNotAllowed];
}
参考: