gpt4 book ai didi

iphone - NSURLCache 缓存响应问题

转载 作者:行者123 更新时间:2023-12-03 19:42:55 26 4
gpt4 key购买 nike

我正在编写一个 iPhone 应用程序,其中一个选项卡是 twitter feed,我正在解析 twitter xml 并将其很好地放入表格 View 中。如果没有互联网连接,我想显示上次有互联网连接和更新表时的缓存结果。我正在使用 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/.. 。)我还可以看到响应正在被缓存,因为我实现了 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 不应该再次被调用,但由于一些奇怪的原因它被一次又一次地调用,并且不会从缓存中提取信息,而是尝试再次缓存它。

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

谢谢!

最佳答案

OP 可能不再关心,但对于其他使用此功能的人 - 您应该查看响应中返回的 HTTP header 。 NSURLCache 将检查 header 来决定是否可以使用从缓存返回的内容。缓存控制:Last-Modified:Etag:等

关于iphone - NSURLCache 缓存响应问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com