views:

312

answers:

1

Hello, I'm writing an iPhone application, one of it's tabs is a twitter feed, i'm parsing twitter xml and putting it nicely inside a table view. In case there is no internet connection I would like to show cache results of the last time we had internet connection and the tables were updated. I'm using NSURLCache for that like so:

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];

I can see that for the first time NSLog outputs "Didn't got response" since it's the first time visiting this website (http://www.twitter.com/...) I can also see that the response is being cached, since i implemented the willCacheResponse method which is being called after the initWithRequest was launched, like so:

 - (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;
}

The second time i visit this site i can clearly see that NSLog outputs "Got Response" which means that there was a cache hit, hence willCacheResponse should not be called again, but for some strange reason it is called again and again and does not pull the information out of the cache, instead it try to cache it again.

Any idea what causing this issue ?

Thanks!

A: 

If I understand your question correctly, then I had the same problem and never solved it: http://stackoverflow.com/questions/1870004/does-nsurlconnection-take-advantage-of-nsurlcache

As far as I can tell, NSURLConnection just doesn't take advantage of the cache, and you have to do it yourself if you want it.

jasoncrawford
This is exactly my problem, seems like it's only caching the response URL not it's data, so in case i want to use it i can verify that i visited a specific site already.I actually worked all day yesterday to implement the cache using NSKeyedArchive, i use the NSURLCache at the beginning just as an indication that i cached that site, if the response is no i cache it, if the response is yes i pull it out of the Archive.They should make the documentation on this subject a bit more clear, and also add some examples.
djTeller