使用NSURLCache的脱机模式

时间:2014-04-28 12:21:08

标签: ios objective-c cocoa-touch afnetworking-2 nsurlcache

我正在使用AFURetworking和NSURLCache。使用NSURLRequestUseProtocolCachePolicy创建请求。应用程序收到带标题的回复:

Etag = "1398684731";
Cache-Control = "public";

一切都很完美。但现在我需要添加离线模式。

它应该如何运作:

  • 如果互联网连接可用,一切都应该照常工作 (应用程序要求后端获取新数据,如果有不同的话 如果Etag相同,则会下载Etag个新数据 - 缓存响应 用来)。
  • 如果没有互联网连接 - 缓存响应是 使用。

问题是在离线模式下请求失败。

我尝试使用各种Cache-Control选项来解决此问题,但似乎它不会以这种方式工作。

我在这里找到了可能的解决方案https://stackoverflow.com/a/15885318/3140927。它应该有效,但它不是很优雅,我认为去年可能会发生一些变化。

此外,我发现" NSURLCache并非用于显式离线方案,而且它旨在加速Safari,不应用于手动下载"。 SDURLCache会更好地用于我的目的吗?

那么什么是实现离线模式的最佳方式?

2 个答案:

答案 0 :(得分:1)

听起来您希望请求成功,即使缓存显示数据已过期且应从服务器检索。您可能有幸为某些请求设置缓存策略(在线与离线的不同策略),而您宁愿使用陈旧数据而不是失败。

很棒的链接就在这里 - > SDURLCache with AFNetworking and offline mode not working

答案 1 :(得分:0)

今天我尝试用这篇文章解决完全相同的问题并且效果很好:http://blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache/。关键在于子类NSURLCache,使您的缓存独立于响应头。

我在示例中发现了几个错误类型,但希望它对您有所帮助!