Je suis en train d'écrire une application iPhone, l'un de ses onglets est un flux twitter, je suis en train d'analyser twitter xml et de le mettre joliment dans une vue de table. Dans le cas où il n'y a pas de connexion Internet, je voudrais montrer les résultats de cache de la dernière fois que nous avions une connexion Internet et les tables ont été mises à jour. J'utilise pour cela NSURLCache comme ceci:NSURLCache Problème avec la réponse du cache
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];
je peux voir que pour la première fois sorties NSLog « n'a reçu une réponse » car il est la première fois visiter ce site je peux (http://www.twitter.com/...) voir aussi que la réponse est mise en mémoire cache, depuis que je mis en œuvre la méthode willCacheResponse qui est appelé après la initWithRequest a été lancé, comme ceci:
- (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;
}
la deuxième fois que je visite ce site je peux voir clairement que les sorties NSLog " Got Response ", ce qui signifie qu'il y a eu un cache, donc willCacheResponse s hould pas appelé, mais pour une raison étrange, il est appelé encore et encore et ne tire pas les informations hors du cache, à la place, il essaie de le mettre en cache à nouveau.
Une idée de ce qui cause ce problème?
Merci!
J'ai essayé toutes sortes de politiques. Fondamentalement, j'ai besoin d'utiliser NSURLRequestUseProtocolCachePolicy, toujours charger à distance s'il y a une connexion Internet, sinon charger à partir du cache, mais les deux me donnent le même problème. – djTeller