17

我在一個特定的文件夾上設置NSURLCache(../../Application Support/Offline,所以它不會被操作系統隨機刪除),然後用NSURLRequestReturnCacheDataElseLoad策略發送一個NSURLRequest。如何知道NSURLResponse是否來自緩存?

如何判斷由符合NSURLConnectionDelegate的類處理的響應來自緩存還是來自網絡?

這裏有關問題

回答

6

好文章:

http://andrewmarinov.com/ioss-corenetwork-lying/

基本上,從NSHTTPURLResponse狀態代碼始終是200

所以,如果你真的需要知道,你可以檢查的項目是緩存在您提出請求之前

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; 
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response; 

如果是這樣保存修改過的'etag'或'modified-date'標頭

NSString* etag = httpCacheResponse.allHeaderFields[@"etag"]; 

然後,在響應處理程序中檢查etag或修改日期是否相同。如果是這樣,響應來自緩存!

+0

這基本上是我最終做的 – greg3z

+2

你可以隨時回答你自己的問題!會救我一個小時的生命;-) –

相關問題