NSURLSession的NSURLCache无法按预期工作

时间:2015-01-04 21:04:42

标签: ios swift nsurlsession nsurlcache

我在使用NSURLCache时看到了奇怪的行为并且耗尽了所有选项但是在这里张贴......所以这里是:

我正在尝试将NSURLCacheNSURLSession结合使用作为基础缓存机制。使用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

检查一下,让我知道我做错了什么!

1 个答案:

答案 0 :(得分:0)

我看到你的GET请求有参数,为此我认为我们面临同样的情况。

我找到了一个覆盖NSURLCache做一些调整并访问底层数据库的解决方案,你可以在这里看到它:

https://github.com/JCardenete/NTURLCache/tree/master/NTURLCache

NSURLCache - Disk caching for GET request with parameters not working