我正在编写一个 iPhone 应用程序,其中一个选项卡是 twitter feed,我正在解析 twitter xml 并将其很好地放入表格视图中。
如果没有互联网连接,我想显示上次有互联网连接和更新表时的缓存结果。
我使用 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 第一次输出“没有得到响应”,因为这是第一次访问该网站(http://www.twitter.com/.. http://www.twitter.com/...)
我还可以看到响应正在被缓存,因为我实现了 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 输出“Got Response”,这意味着存在缓存命中,因此 willCacheResponse 应该not再次被调用,但由于某种奇怪的原因,它被一次又一次地调用,并且不会从缓存中提取信息,而是尝试再次缓存它。
知道是什么导致了这个问题吗?
Thanks!
OP 可能不再关心,但对于其他玩这个的人来说 - 您应该查看响应中返回的 HTTP 标头。 NSURLCache 将检查标头来决定是否可以使用从缓存返回的内容。缓存控制:上次修改时间:Etag:等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)