Iphone NSURLCache问题与缓存响应

Iphone NSURLCache问题与缓存响应,iphone,iphone-sdk-3.0,nsurlcache,Iphone,Iphone Sdk 3.0,Nsurlcache,我正在编写一个iPhone应用程序,其中一个标签是twitter提要,我正在解析twitter xml,并将其很好地放在表视图中。 如果没有internet连接,我想显示上次internet连接和表更新时的缓存结果。 我正在使用NSURLCache进行类似的操作: NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:xmlLink] cachePolicy:NSURLReques

我正在编写一个iPhone应用程序,其中一个标签是twitter提要,我正在解析twitter xml,并将其很好地放在表视图中。 如果没有internet连接,我想显示上次internet连接和表更新时的缓存结果。 我正在使用NSURLCache进行类似的操作:

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];
我第一次看到NSLog输出“没有得到响应”,因为这是第一次访问这个网站(.) 我还可以看到响应正在被缓存,因为我实现了willCacheResponse方法,该方法在initWithRequest启动后被调用,如下所示:

 - (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;
}
第二次访问此站点时,我可以清楚地看到NSLog输出“Get Response”,这意味着缓存命中,因此willCacheResponse不应再次调用,但由于某些奇怪的原因,它被一次又一次调用,并且没有从缓存中取出信息,而是尝试再次缓存

知道是什么导致了这个问题吗


谢谢

如果我正确理解了你的问题,那么我也遇到了同样的问题,而且从未解决过:


据我所知,NSURLConnection只是没有利用缓存,如果您需要,您必须自己做。

OP可能不再关心,但对于其他使用此功能的人,您应该查看响应中返回的HTTP头。NSURLCache将检查标头,以确定是否可以使用从缓存返回的内容。缓存控制:上次修改:Etag:等。

请尝试此库:

我尝试了所有类型的策略。基本上,我需要使用NSURLRequestUseProtocolCachePolicy,如果有internet连接,总是从远程加载,否则从缓存加载,但两者都给了我相同的问题。这正是我的问题,似乎只是缓存响应URL而不是它的数据,所以如果我想使用它,我可以验证我是否已经访问了特定的站点。实际上,我昨天花了一整天的时间使用NSKeyedArchive实现缓存,一开始我使用NSURLCache只是作为我缓存该站点的指示,如果响应为否,我缓存它,如果响应为是,我将其从归档中拉出。他们应该使这个主题的文档更加清晰,并添加一些示例。