NSURLCache Problema com a resposta do cache
Estou escrevendo um aplicativo para iPhone, uma das guias é um feed do twitter, estou analisando o twitter xml e colocando-o bem dentro de uma exibição de tabela. Caso não haja conexão com a Internet, gostaria de mostrar os resultados do cache da última vez em que tivemos conexão com a Internet e as tabelas foram atualizadas. Estou usando o NSURLCache para isso da seguinte maneira:
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:xmlLink]
cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60];
NSURLCache *sharedCache = [NSURLCache sharedURLCache];
NSCachedURLResponse *response = [sharedCache cachedResponseForRequest:theRequest];
if (response) {
NSLog(@"Got Response");
} else {
NSLog(@"Didn't got Response");
}
self.objectFeedConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES] autorelease];
Percebo que, pela primeira vez, o NSLog gera "Não obteve resposta", já que é a primeira vez que visita este site (http://www.twitter.com/ ...) Também posso ver que a resposta está sendo armazenada em cache, desde que implementei o método willCacheResponse que está sendo chamado após o lançamento do initWithRequest, da seguinte forma:
- (NSCachedURLResponse *) connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
NSLog(@"willCache Reponse");
NSCachedURLResponse *newCachedResponse = nil;
if ([[[[cachedResponse response] URL] scheme] isEqual:@"http"]) {
newCachedResponse = [[[NSCachedURLResponse alloc]
initWithResponse:[cachedResponse response]
data:[cachedResponse data]
userInfo:nil
storagePolicy:[cachedResponse storagePolicy]]
autorelease];
}
return newCachedResponse;
}
Na segunda vez que visito este site, posso ver claramente que o NSLog gera "Got Response", o que significa que houve um acerto no cache; portanto, willCacheResponse devenão ser chamado novamente, mas por algum motivo estranho, ele é chamado repetidamente e não extrai as informações do cache; em vez disso, tenta armazená-las novamente.
Alguma idéia do que está causando esse problema?
Obrigado!