8

だから私はサブクラス化し、それNSURLCacheを呼び出すたびにand thenを呼び出します。ここに私が持っているものがあります:loadHTMLFromString:storeCachedRequest:forRequest:cachedResponseForRequest:

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
    NSString *pathString = [[request URL] absoluteString];

    NSCachedURLResponse * response = [super cachedResponseForRequest:request];
    if (response != nil)
        return response;
    else {
        NSString* myString= @"testing";

        NSData* data=[myString dataUsingEncoding: NSASCIIStringEncoding ];

        //
        // Create the cacheable response
        //
        NSURLResponse *response =
        [[[NSURLResponse alloc]
          initWithURL:[request URL]
          MIMEType:[self mimeTypeForPath:pathString]
          expectedContentLength:[data length]
          textEncodingName:nil]
         autorelease];
        NSCachedURLResponse * cachedResponse =
        [[[NSCachedURLResponse alloc] initWithResponse:response data:data] autorelease];

        [self storeCachedResponse:cachedResponse forRequest:request] ;

        //NSLog(@"DEFAULT CACHE WITH URL %@", [[request URL] absoluteString]);
        return [super cachedResponseForRequest:request];
    }

    return nil;
}

- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request
{
    [super storeCachedResponse:cachedResponse forRequest:request];

    NSLog(@"STORE CACHED RESPONSE WITH URL %@", [[request URL] absoluteString]);
}

cachedResponseForRequest:問題は、保存した直後に呼び出すと、応答が常にゼロになることです。どうしてこれなの?

私が持っていた:

NSURLRequest * req = [NSURLRequest requestWithURL:[NSURL URLWithString:self.imageSource_]];
NSCachedURLResponse * response = [[NSURLCache sharedURLCache] cachedResponseForRequest:req];

if (response == nil)
    NSLog(@"RESPONSE IS NIL");
else {
    NSString* theString = [[NSString alloc] initWithData:response.data encoding:NSASCIIStringEncoding];
    NSLog(@"RESPONSE IS NOT NIL %@", theString);
}

そして、常に response is nil を出力します。URL 文字列は storeCachedResponse. 何らかの理由でキャッシュされていません。キャッシュサイズをある程度のサイズに設定しました。

4

2 に答える 2

1

100% 確実ではありませんが、自分で作成するのではなく、NSURLResponse自分から返されたを使用する必要があると思います。NSURLConnection私の疑いでは、を作成しただけNSURLResponseでは、キャッシュ用にヘッダーが設定されていないため、NSURLCacheこの特定の結果をキャッシュする必要があると想定しています。

于 2012-01-20T03:56:57.713 に答える
1

デフォルトの NSURLCache は、何をキャッシュするかどうかを選択するときにかなりランダムに見えます。あなたの最善の策は、それをサブクラス化し、気になるファイルのキャッシュを直接 cachedResponseForRequest: で処理し、残りを super に残すことです。

于 2012-11-26T07:21:34.410 に答える