1

UIWebView と NSURLCache sharedCache のキャッシュをテストするために、ARC 準拠の iOS 6 SDK ビルド アプリケーションをセットアップしました。

私は次のように 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 を使用しているデスクトップからは、ページをリロードしたときにデバイスに表示される 200 に対して、サーバーから 304 応答が返されます。

アプリのデリゲートで、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 に答える