我已经设置了一个兼容 ARC 的 iOS 6 SDK 构建的应用程序来尝试测试 UIWebView 和 NSURLCache sharedCache 的缓存。
我正在像这样形成对 UIWebView 的请求:
-(void)runRequestWithMode:(NSURLRequestCachePolicy)policyMode
{
NSString *theURL = @"http://server.mine.com:5555/test.htm";
NSURL *url = [[NSURL alloc] initWithString:theURL];
NSMutableURLRequest* urlRequest = [[NSMutableURLRequest alloc] initWithURL:url
cachePolicy:policyMode
timeoutInterval:30.0];
if ([urlRequest cachePolicy] != policyMode) {
NSLog(@"!!!!!!!!OVERRULED!!!!!!!");
}
[_webView loadRequest:urlRequest];
}
在应该加载的 UIWebViewDelegate 回调中:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
// NSLog(@"webView shouldStartLoadWithRequest loading %@", [[request URL] absoluteString]);
NSLog(@"webView request cachePolicy: %d", [request cachePolicy]);
我的日志记录的控制台输出显示请求未使用我在运行此回调时在可变请求上设置的 cachePolicy。
即使我此时操作请求将 cachePolicy 设置为正确的初始设置,服务器站点仍然没有报告 304(数据请求是未更改的页面并使用缓存作为响应)
在使用 chrome 的桌面上,我确实从服务器收到了 304 响应,而当我重新加载页面时,我在设备上看到的是 200。
在我的应用委托(delegate)中,我设置了我的 url 缓存:
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
diskCapacity:20 * 1024 * 1024
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
我需要做什么才能让我的应用程序的 Web View 接收 304 响应?
任何帮助或阅读文档的指针都将不胜感激。
最佳答案
看起来 UIWebView 没有使用 NSURLCache...
How to cache content in UIWebView for faster loading later on?
对我这边的 UIWebView 出了什么问题有很好的洞察力。我会尝试这个,看看我是否可以使用它作为我的基础来实现最终解决方案。
关于ios - UIWebView 缓存不适用于 NSURLRequestReturnCacheDataElseLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310392/