【问题标题】:Get cached Data of webpage in my iOS app在我的 iOS 应用程序中获取网页的缓存数据
【发布时间】:2014-09-13 17:53:51
【问题描述】:

我正在使用 NSUrlConnection 从 Web 服务中获取一些数据,该服务在我点击 url 时返回 JSON 数据,但有时页面会关闭或出现问题。

当网页返回 404 时,有没有办法在我的 iOS 应用程序中使用缓存版本的 url 来获取该数据?

如果我在浏览器中访问缓存:mysite.com/test.php,即使页面关闭,我也可以看到 JSON 数据,但是当我尝试在我的 iOS 应用程序中使用相同的 url 时,我没有得到JSON 数据返回。

是否有我不知道的 Obj C 类或 NSUrlConnection 的选项?

【问题讨论】:

  • 当您发出请求并且请求成功时,您为什么不将它们存储在您自己的缓存中,它可以是一个持久的自定义对象(核心数据,sqllite等)?然后,您可以从缓存中获取任何失败的未来调用,并让用户知道调用失败并且您正在向他们展示您在缓存元数据中指定的任何日期最后一次获取的缓存版本。
  • 这就是我在其他任何情况下都会做的事情,但特别是对于这个应用程序,我想查看网页缓存。我以前看过它,但我找不到任何关于如何自己做的信息。
  • 知道了,事实上,现在我已经对此进行了更多研究,这实际上听起来像是每个人的应用程序都可以遵循的好习惯。请参阅nshipster.com/nsurlcache 但我不知道如何在发生 404 时专门强制使用缓存,而不是创建自己的缓存以仅在这些情况下使用并在 normal 情况下使用 NSUrlCache。
  • 优秀的文章!我必须说,NSHipster 是 Obj C 的一个了不起的来源!然而,通读这两篇文章,他们解释了如何在响应连同其数据一起被抓取时缓存数据。我正在寻找的是如何在我决定如何处理它返回的数据之前获取 url 的缓存版本。
  • 您可以继承 NSURLCACHE,您将不得不使用它们的实现,因为在您的情况下,您希望将缓存用于 404,或者很可能在发生 500 错误时使用......blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache

标签: ios objective-c nsurlconnection


【解决方案1】:

NSURLConnectionalready uses a cache。默认情况下它只在内存中缓存响应,您可以通过将其设置为也使用磁盘存储来自定义它:

NSURLCache *result = [[NSURLCache alloc] initWithMemoryCapacity:[(1024*1024*512) diskCapacity:(1024*1024*1024 * 100) diskPath@"Cache.db"]:
[NSURLCache setSharedURLCache:result];

您看到问题中描述的行为的原因是远程 Web 服务告诉您的客户端不要缓存响应。您可以使用REDbotCharles 之类的工具进行检查。默认情况下NSURLRequest 将使用协议的缓存策略和语义,这几乎总是正确的做法。您可以通过更改NSURLRequestcachePolicy 属性来指定不同的缓存策略。

【讨论】:

  • 我完全理解这种行为的原因,但我不太确定我理解如何使用缓存数据。 cachePolicy 属性设置为默认值,因为我注意到其他选项主要用于不使用缓存的情况。您能否就如何获取缓存数据进行合作?
  • 这在很大程度上取决于您需要应用程序做什么。例如,NSURLRequestReturnCacheDataElseLoad 将使用缓存,除非没有缓存响应,在这种情况下它将与服务器通信。 NSURLRequestReturnCacheDataDontLoad 将始终使用缓存,并且从不尝试使用服务器。您还可以直接访问NSURLCache,以根据您的应用程序逻辑访问缓存的响应。在不了解您的应用程序需求的情况下,我无法提供比我的答案更具体的指导。
【解决方案2】:

经过大量搜索,我没有找到在我的 iOS 应用程序中获取网页缓存版本的方法,但我通过查找响应状态代码并使用 Google Cache 或存档等服务处理了 404 错误。 org/web/ 如果找到 404,则获取 url 的缓存版本。

可能不是最微妙的方式,但我在发出请求时找不到另一种方式来获取网站的缓存版本。

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2019-09-23
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多