我在使用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)
NSURLSession
的{{1}}委托方法根本没有被调用:
willCacheResponse:
但是,如果只是在没有指定特定func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, willCacheResponse proposedResponse: NSCachedURLResponse, completionHandler: (NSCachedURLResponse!) -> Void) {
的情况下请求NSURLRequest(URL: NSURL(string: URLString)!)
,那么就会调用 cachePolicy
。然而,下次发出相同的请求时,应用程序会返回服务器...
我没有在任何NSURLSession委托方法中做任何响应对象修改,我的请求都是willCacheResponse:
。
我错过了什么?
我在NSURLCache上已经阅读了很多内容:
设置:Xcode6.1,Swift,iOS8 +
修改:我将一个基本示例推送到github以显示我的问题:https://github.com/opfeffer/nsurlcache
检查一下,让我知道我做错了什么!
答案 0 :(得分:0)
我看到你的GET请求有参数,为此我认为我们面临同样的情况。
我找到了一个覆盖NSURLCache做一些调整并访问底层数据库的解决方案,你可以在这里看到它:
https://github.com/JCardenete/NTURLCache/tree/master/NTURLCache
NSURLCache - Disk caching for GET request with parameters not working