如何强制NSURLCache缓存响应,即使它仍然有一个有效的缓存?

时间:2014-06-24 13:07:33

标签: ios objective-c cocoa-touch caching nsurlcache

我使用NSURLCache(AFNetworking)缓存来自后端的响应,设置Cache-Control = max-age=3600, public。到目前为止这个工作正常。当用户打开应用程序且数据不超过一小时时,它将从缓存中获取该数据。较旧时,它会从后端加载它。

我还有一个pull to refresh选项,允许用户通过覆盖缓存从后端获取新数据,即使它仍然有有效的缓存数据,也可以正常工作。

我遇到的问题是,新检索的数据(通过覆盖缓存)不会被缓存。场景是这样的:

  1. 用户打开应用,并使用Cache-Control = max-age=3600, public
  2. 从后端加载时间戳x
  3. 用户研究数据10分钟。
  4. 用户现在手动刷新数据,并使用Cache-Control = max-age=3600, public
  5. 从后端拉出时间戳为y的新数据
  6. 用户再研究新数据10分钟并关闭应用程序。
  7. 用户再次打开应用程序,但会看到带有时间戳x的数据,而不是带有时间戳y的数据
  8. 在我看来,NSURLCache只是缓存来自同一资源的数据,只要它具有有效的缓存数据,即使同时来自同一资源的新数据也是如此。有没有人知道如何告诉NSURLCache缓存最新检索的数据,即使它仍然有有效数据?或者它只是按设计工作?任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

您没有编写用于手动刷新的代码。我猜您使用了NSURLRequestReloadIgnoringCacheData政策。我没有测试是否将更新的响应存储在缓存中。但是,如果它不存储它,我会使用 共享removeCachedResponseForRequest:上的NSURLCache,然后照常加载数据。