2012-03-15 10 views
0

以下は、ASIHTTPRequestを使用してリモートサーバーからイメージをダウンロードおよびキャッシュするためのソースコードです。サーバが新しい画像で更新されていない場合は、画像のキャッシュされたコピーを使用します。それは最初の要求ですべての画像をキャッシュしており、正常に動作しています。ASIDownloadCacheが新しいコンテンツで更新されない

毎回新しいコンテンツが利用可能かどうかをサーバーでチェックする予定です。私はサーバーログをチェックして、ステータスコードを印刷しています。しかし、私は最新の画像で更新したときに新しい画像で表示されません。代わりにキャッシュされたイメージを表示しています。しかし、サーバーログは、ステータスコード200で新しいイメージを送信していると言います。この動作を回避するには、アプリケーションを削除して再インストールする必要があります。

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
request.timeOutSeconds = kDefaultTimeInterval; 
request.validatesSecureCertificate = NO; 
[request setDownloadCache:[ASIDownloadCache sharedCache]]; 
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy]; 
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 
[request setSecondsToCache:kSecondsToCache]; 
[request startSynchronous]; 

if (![request didUseCachedResponse]) { 
    NSLog(@" Cache miss. Loading resource %@", location); 
} else { 
    NSLog(@" Cache hit!"); 
} 
NSLog(@" *** image data size: %u bytes", [request.responseData length]); 
return ([request error]) ? nil : request.responseData; 

ここには何が欠けていますか?

答えて

0

最後に、自分で何が起こったのかを考え出しました。それは単なる愚かな間違いであり、APIの誤解です。

キャッシュする秒単位で、値の設定までキャッシュを保持すると考えていました。しかし、そうではないようです。ドキュメントごとに

Set secondsToCache on the request to override any expiry date for the content 
set by the server, and store this response in the cache until secondsToCache 
seconds have elapsed 

したがって、サーバーによって設定された値を上書きします。したがって、サーバーが新しいコンテンツで更新され、要求に設定された有効期限が切れていない場合でも、ローカルコピーが使用されます。

フィックスとして私はラインを削除しました[request setSecondsToCache:kSecondsToCache];

関連する問題