ios - NSURLSession 的 NSURLCache 没有按预期工作

标签 ios swift nsurlsession nsurlcache

我在使用 NSURLCache 时看到了奇怪的行为,并用尽了所有选项但在这里发布......所以这里是:

我正在尝试将 NSURLCacheNSURLSession 结合使用作为底层缓存机制。使用 Charles 和简单的 println() 我观察到无论我做什么,我的应用程序都会继续返回服务器并重新请求以前的请求。

我验证了我的服务器一致地发送以下 header :

 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: 委托(delegate)方法根本没有被调用:

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

但是,当简单地请求 NSURLRequest(URL: NSURL(string: URLString)!) 而不指定特定的 cachePolicy 时,然后 willCacheResponse: 确实被调用了。尽管如此,下次发出相同请求时,应用程序会返回到服务器...

我没有在任何 NSURLSession 委托(delegate)方法中做任何响应对象修改,我的请求都是 HTTP GET

我错过了什么?

我已经阅读了很多关于 NSURLCache 的内容:

设置:Xcode6.1、Swift、iOS8+

编辑: 我将一个基本示例推送到 github 以显示我的问题:https://github.com/opfeffer/nsurlcache

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

最佳答案

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

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

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

NSURLCache - Disk caching for GET request with parameters not working

关于ios - NSURLSession 的 NSURLCache 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27770350/

相关文章:

ios - 未调用 UIAlertView 子类中的 alertViewShouldEnableFirstOtherButton

iphone - UINavigationController 栈

ios - Swift 3 上传图片问题(格式)

ios - NSURLCache 对早于 max-age 的请求使用缓存

objective-c - native iOS Facebook SSO 不会返回到应用程序

ios - 如何防止WKWebView在应用程序发送到后台后被清空

ios - 核心数据 - 为什么获取请求返回零?

swift - 尝试快速移动 x 和 y 字段中的图像

ios - 自定义 NSURLProtocol 不会调用 canInitWithRequest :

ios - 如何在 NSURLSession 中禁用每个套接字的多个请求?