UIWebView缓存不适用于NSURLRequestReturnCacheDataElseLoad

时间:2013-06-26 01:59:54

标签: ios caching uiwebview browser-cache

我已经设置了一个符合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响应。

在我的app委托中,我已经设置了我的url缓存:

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
                                                         diskCapacity:20 * 1024 * 1024
                                                             diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];

如何让我的应用程序的Web视图收到304响应?

任何帮助或指针都可以阅读文档。

1 个答案:

答案 0 :(得分:1)

看起来UIWebView不使用NSURLCache ...

How to cache content in UIWebView for faster loading later on?

能够很好地了解我的UIWebView出了什么问题。我将尝试这一点,看看我是否可以使用它作为我的基础来实现最终的解决方案。