NSURLCache没有缓存

adi*_*dit 8 iphone objective-c nsurlcache ipad

所以我有子类NSURLCache,每次我调用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]);
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我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);
}
Run Code Online (Sandbox Code Playgroud)

并且它总是打印响应为零.url字符串与它时的字符串相同 storeCachedResponse.出于某种原因,它不是缓存.我已经将缓存大小设置为一定的大小.

Joh*_*ool 1

不是 100% 确定,但我认为你需要使用NSURLResponse你返回的NSURLConnection而不是创建你自己的。我的怀疑是,如果您只是创建一个,NSURLResponse它没有为缓存设置任何标头,因此NSURLCache假设它应该缓存这个特定的结果。