1

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

在我的应用程序委托中,我已经设置了我的 url 缓存:

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

我需要做什么才能让我的应用程序的 Web 视图接收 304 响应?

任何阅读文档的帮助或指针将不胜感激。

4

1 回答 1

1

看起来 UIWebView 不使用 NSURLCache ......

如何在 UIWebView 中缓存内容以便以后更快地加载?

对我的 UIWebView 出了什么问题有很好的了解。我会试试这个,看看我是否可以使用它作为我的基础来实施最终的解决方案。

于 2013-06-26T06:36:31.460 回答