我正在写一个iPhone应用程序,它的一个选项卡是一个Twitter供稿,我正在解析twitter xml并将其很好地放在表视图中。 如果没有互联网连接,我想显示最后一次互联网连接和表更新的缓存结果。 我使用NSURLCache对于像这样: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/..。)还看到,响应被缓存,因为我实现了initWithRequest推出之后被调用,像这样的willCacheResponse方法:
- (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输出“得到的回应“这意味着有一个缓存命中,因此willCacheResponse s应该再次调用而不是,但出于某种奇怪的原因,它被一次又一次地调用,并且不会将信息从缓存中取出,而是尝试再次缓存它。
任何想法是什么导致此问题?
谢谢!
我尝试了所有类型的政策。 基本上我需要使用NSURLRequestUseProtocolCachePolicy,总是从远程加载如果有互联网连接,否则从缓存中加载,但两者都给我同样的问题。 – djTeller 2010-02-25 23:17:59