ary*_*axt 8 nsurlcache swift alamofire
我将缓存设置如下
var cacheSizeMemory = 20 * 1024 * 1024
var cacheSizeDisk = 100 * 1024 * 1024
var sharedCache = NSURLCache(memoryCapacity: cacheSizeMemory, diskCapacity: cacheSizeDisk, diskPath: "SOME_PATH")
NSURLCache.setSharedURLCache(sharedCache)
Run Code Online (Sandbox Code Playgroud)
使用缓存策略创建请求
var request = NSMutableURLRequest(URL: NSURL(string: "\(baseUrl!)\(path)")!, cachePolicy: .ReturnCacheDataElseLoad, timeoutInterval: timeout)
Run Code Online (Sandbox Code Playgroud)
提出请求并获得以下回复 Cache-Control private, max-age=60
然后尝试检查缓存
var cachedResponse = NSURLCache.sharedURLCache().cachedResponseForRequest(urlRequest)
Run Code Online (Sandbox Code Playgroud)
价值是零
有什么想法吗?
Fra*_*k R 18
我能够通过将页面写入sharedURLCache来手动缓存页面,如下所示:
Alamofire.request(req)
.response {(request, res, data, error) in
let cachedURLResponse = NSCachedURLResponse(response: res!, data: (data as NSData), userInfo: nil, storagePolicy: .Allowed)
NSURLCache.sharedURLCache().storeCachedResponse(cachedURLResponse, forRequest: request)
}
Run Code Online (Sandbox Code Playgroud)
NSURLCache似乎尊重服务器发送的标头,即使您在代码中的其他地方配置了相反的内容.
例如,维基百科API发送
Cache-control: private, must-revalidate, max-age=0
Run Code Online (Sandbox Code Playgroud)
转换为:必须在0秒后重新验证.
所以NSURLCache说:"好的,我不会缓存任何东西."
但是通过手动将响应保存到缓存,它可以正常工作.至少在iOS 8.2上.
在这个问题上几乎失去了理智.:)
我结束了手动添加Cache-Control为private我的请求的头,它现在的作品.甚至不需要手动检查缓存,Alamofire会为您完成
let cachePolicy: NSURLRequestCachePolicy = isReachable() ? .ReloadIgnoringLocalCacheData : .ReturnCacheDataElseLoad
var request = NSMutableURLRequest(URL: NSURL(string: "\(baseUrl!)\(path)")!, cachePolicy: cachePolicy, timeoutInterval: timeout)
request.addValue("private", forHTTPHeaderField: "Cache-Control")
var alamoRequest = Manager.sharedInstance.request(urlRequest)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10716 次 |
| 最近记录: |