我想让我的api响应json被缓存,以便用户可以在离线模式下继续使用该应用。但是,结果不会被缓存,并且当我关闭WiFi时显示错误警报。NSURLSession不缓存请求
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
guard (data != nil) else {
self.showConnectionErrorAlert()
return
}
}
task.resume()
这是我如何配置我的NSURLCache:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let cacheSizeMemory = 500*1024*1024; // 500 MB
let cacheSizeDisk = 500*1024*1024; // 500 MB
let sharedCache = NSURLCache.init(memoryCapacity: cacheSizeMemory, diskCapacity: cacheSizeDisk, diskPath: "nsurlcache")
NSURLCache.setSharedURLCache(sharedCache)
sleep(1);
return true
}
这里是响应头时在线:
可选({网址: http://api.nytimes.com/svc/search/v2/articlesearch.json?&page=2&fq=document_type:(article)&sort=newest&api-key=32a4d3342b658b316d4b1369d04a6e5b:16:73440927 } {状态代码:200, “Access-Control-Allow-Credentials”= true; “Access-Control-Allow-Origin”=“*”; “Content-Length”= 20212; “Content-Type”=“application/json; charset = UTF-8”; 日期=“2015年11月13日星期五20:02:49 GMT”; Server =“nginx/1.4.1”; Vary =“Accept-Encoding”; “X-Cached”= MISS; “X-Mashery-Responder”=“prod-j-worker-atl-04.mashery.com”; “X-Powered-By”=“PHP/5.3.27”; }})
这里是错误时离线:
可选(错误域= NSURLErrorDomain代码= -1009 “互联网 连接似乎是离线” 的UserInfo = {NSErrorFailingURLStringKey = http://api.nytimes.com/svc/search/v2/articlesearch.json?&page=1&fq=document_type:(article)&sort=newest&api-key=32a4d3342b658b316d4b1369d04a6e5b:16:73440927, _kCFStreamErrorCodeKey = 8,NSErrorFailingURLKey = http://api.nytimes.com/svc/search/v2/articlesearch.json?&page=1&fq=document_type:(article)&sort=newest&api-key=32a4d3342b658b316d4b1369d04a6e5b:16:73440927, NSLocalizedDescription =互联网连接似乎离线。, _kCFStreamErrorDomainKey = 12,NSUnderlyingError = 0x7bfd1360 {错误域= kCFErrorDomainCFNetwork代码= -1009 “(空)” 的UserInfo = {_ kCFStreamErrorDomainKey = 12,_kCFStreamErrorCodeKey = 8}}})
响应被缓存,而不是请求。什么是响应标题? – Wain
@Wain,我用回应标题编辑了这个问题 – etayluz