2015-01-04 81 views
3

我使用NSURLCache何時用盡了所有選項,但張貼在這裏看到奇怪的行爲......所以在這裏,它是:NSURLSession的NSURLCache工作不正常

我想實現組合NSURLCache作爲基礎緩存機制與NSURLSession。並且使用Charles和簡單的println()我觀察到,無論我做什麼,我的應用程序都會繼續返回到服務器並重新請求以前的請求。

我驗證了我的服務器發送以下標題一致:

Cache-Control:public, max-age=31449600 
Content-Length:74289 
Content-Type:image/jpeg 
ETag:"abcdf" 
Expires:Sun, 03 Jan 2016 20:58:01 GMT 
Last-Modified:Sat, 09 Nov 2013 08:05:53 GMT 

然而,當我提出以下要求:

let req = NSURLRequest(URL: NSURL(string: URLString)!, cachePolicy: .ReturnCacheDataElseLoad, timeoutInterval: 15) 

NSURLSessionwillCacheResponse:委託方法不會被調用所有:

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, willCacheResponse proposedResponse: NSCachedURLResponse, completionHandler: (NSCachedURLResponse!) -> Void) { 

然而,當簡單地r equesting NSURLRequest(URL: NSURL(string: URLString)!)沒有指定具體的cachePolicy,然後willCacheResponse:確實被調用。然而,下次發出同樣的請求時,應用程序會返回到服務器...

我不會在任何NSURLSession委託方法中做任何響應對象修改,我的請求都是HTTP GET

我錯過了什麼?

我讀過很多這是在那裏上NSURLCache:

設置:Xcode6.1,雨燕,iOS8上+

編輯:我推一個基本的例子來Github上顯示我的問題:https://github.com/opfeffer/nsurlcache

檢查出來,讓我知道我做錯了什麼!

+0

我們可以看到一個小的,完整的代碼演示示例問題?例如,知道您實際發出請求的方式以及創建會話(包括會話配置對象)會很有幫助。 –

+0

你正在請求什麼URL?你使用GET還是POST?您能否從日誌中看到客戶端發送給服務器的內容?任何防火牆都會造成問題嗎? – AlBlue

+0

@MattGibson:我向github添加了一個示例應用程序。一探究竟!謝謝!!! – opfeffer

回答