私は iPhone アプリケーションを作成しています。そのタブの 1 つは Twitter フィードです。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];
この Web サイト ( http://www.twitter.com/.. ) に初めてアクセスしたので、初めて NSLog が「応答がありませんでした」を出力することがわかります。また、応答がキャッシュされていることもわかります。 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;
}
このサイトに 2 回目にアクセスすると、NSLog が "Got Response" を出力することがはっきりとわかります。これは、キャッシュ ヒットがあったことを意味します。キャッシュから情報を取り出し、代わりに再度キャッシュしようとします。
この問題の原因は何ですか?
ありがとう!