簡體   English   中英

如何使特定URL的iOS緩存無效?

[英]How do I invalidate iOS's cache for a particular URL?

使用NSURLSession的默認緩存,如何使特定URL的緩存無效?

我注意到了NSURLCacheremoveCachedResponseForRequest:方法,但它接受了一個NSURLRequest對象,我沒有原始請求。 我是否需要在創建它們時存儲它們,以便我可以將它們傳遞回removeCachedResponseForRequest:或者我可以創建一個具有相應URL的新URL,即使它沒有相應的目的也是如此。相同的標題字段和原始的其他屬性?

如果您想要更進一步,可以重置要強制重新加載的URL請求的緩存響應。 執行以下操作:

let newResponse = NSHTTPURLResponse(URL: urlrequest.URL!, statusCode: 200, HTTPVersion: "1.1", headerFields: ["Cache-Control":"max-age=0"])
let cachedResponse = NSCachedURLResponse(response: newResponse!, data: NSData())
NSURLCache.sharedURLCache().storeCachedResponse(cachedResponse, forRequest: urlrequest)

由於響應的緩存控制頭hax的最大年齡為0(強制),因此執行此請求時將永遠不會返回響應。

您的答案適用於強制單個請求,但如果您希望有兩個版本的請求,一個強制,另一個依賴於緩存的響應,則需要在強制請求后刪除緩存的響應。

該解決方案證明不會使現有URL的緩存無效,而是設置:

request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

當您對資源進行下一次請求時,您知道該資源無效。 有些選項可以忽略本地緩存,或者請求上游代理也忽略它們的緩存。 有關詳細信息,請參閱NSURLRequest / NSMutableURLRequest文檔。

以下是為我工作的內容:

request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

以下列出了有關chache政策的所有選項,因此您可以找到更適合您需求的選項:

在此輸入圖像描述

使用Swift 2.2和Xcode 7.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM