我正在寫一個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