Так что я подклассифицировал NSURLCache
и каждый раз, когда я звоню loadHTMLFromString:
, он вызывает storeCachedRequest:forRequest:
, а затем cachedResponseForRequest:
. Вот что у меня есть:NSURLCache не кэширование
- (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);
}
и он всегда печатает ответ равен нулю. Строка url такая же, как и когда storeCachedResponse
. По какой-то причине это не кеширование. Я установил размер кеша в некоторый размер.
Хммм ... вы в этом уверены? потому что storeCachedResponse был вызван непосредственно перед cachedResponseForRequest и response == nil в этом методе – adit
, поэтому, даже если я не создаю свой собственный NSURLResponse, он все равно не сохраняет его – adit
«Хммм ... вы уверены в этом?» Прочтите первые три слова моего ответа еще раз. ;-) –