Iphone NSURLCache问题与缓存响应
我正在编写一个iPhone应用程序,其中一个标签是twitter提要,我正在解析twitter xml,并将其很好地放在表视图中。 如果没有internet连接,我想显示上次internet连接和表更新时的缓存结果。 我正在使用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
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只是作为我缓存该站点的指示,如果响应为否,我缓存它,如果响应为是,我将其从归档中拉出。他们应该使这个主题的文档更加清晰,并添加一些示例。