【发布时间】:2016-02-15 12:10:12
【问题描述】:
我想缓存我的 api 响应 json,以便用户可以在离线模式下继续使用该应用程序。但是,结果没有被缓存,并且当我关闭 WiFi 时会显示错误警报。
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,标题 { “访问控制允许凭据”= true; “访问控制允许来源”=“*”; “内容长度”= 20212; “内容类型”=“应用程序/json;字符集=UTF-8”; 日期 =“格林威治标准时间 2015 年 11 月 13 日星期五 20:02:49”; 服务器=“nginx/1.4.1”; Vary = "接受编码"; “X 缓存”= MISS; “X-Mashery-Responder”=“prod-j-worker-atl-04.mashery.com”; "X-Powered-By" = "PHP/5.3.27"; } })
离线时出现以下错误:
可选(错误域=NSURLErrorDomain Code=-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 "(null)" UserInfo={_kCFStreamErrorDomainKey=12, _kCFStreamErrorCodeKey=8}}})
【问题讨论】:
-
响应被缓存,而不是请求。响应头是什么?
-
@Wain,我已经用响应标题编辑了问题