【问题标题】:Use NSURLConnection cache when device is offline设备离线时使用 NSURLConnection 缓存
【发布时间】:2023-03-10 11:35:01
【问题描述】:

在一个 NSOperation 子类中,我使用以下代码从我们的服务器下载一个 xml 文件,然后再对其进行解析:

NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                      timeoutInterval:15];
NSData * receivedData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

我第二次发出同样的请求,服务器返回一个HTTP 304,缓存的响应数据存储在receivedData。到目前为止一切顺利。

我的问题:是否有可能在设备离线时获得相同的缓存响应

【问题讨论】:

  • 我假设您的意思是自动从 NSURLConnection 开始,而不仅仅是在本地手动存储数据并在网络中断时将其咳出。
  • 确实如此。无论如何数据都会被缓存,如果有办法在网络中断时加载它会很棒。

标签: ios4 ios5 nsurlconnection offline-caching nsurlcache


【解决方案1】:

NSURLCache 不支持磁盘缓存。您可以简单地手动存储它或使用它: https://github.com/steipete/SDURLCache

它是一个非常简单的缓存,可以完成它的工作......非常简单的用法,只有一个类......它也支持 etags。

// Do this only once in your app... SDURLCache *urlCache = [[SDURLCache alloc] initWithMemoryCapacity:1024*1024 // 1MB mem cache diskCapacity:1024*1024*5 // 5MB disk cache diskPath:[SDURLCache defaultCachePath]]; [NSURLCache setSharedURLCache:urlCache]; [urlCache release];

【讨论】:

  • ios5 和 ios6 确实支持磁盘缓存。很高兴在这里提供一些关于如何在没有 SDURLCache 的情况下实现这一目标的额外答案...
猜你喜欢
  • 2013-10-07
  • 1970-01-01
  • 2017-08-04
  • 2016-01-07
  • 2012-03-09
  • 1970-01-01
  • 2011-12-28
  • 2017-02-11
  • 2014-06-04
相关资源
最近更新 更多