如何使用NSURLCache在脱机时返回caching的API响应(iOS应用程序)
我希望有人能够对我一直在研究的几件事情有所了解,但是没有取得太多的进展。
我想利用NSURLCache来返回我在iOS应用程序中进行的API调用的caching响应。 当设备在线时,如果足够近,我想返回caching的响应,否则从远程取回。 当设备离线时,我想立即返回caching的响应(如果有的话),而不pipe它的年龄。
我正在使用AFNetworking
。 我正在做的API调用是由我控制的服务器。 协议是HTTPS。 Cache-Control
响应头当前是"max-age=0, public"
。 我目前不设置caching相关的请求头(我应该?)。 我将请求的caching策略设置为脱机时的NSURLRequestUseProtocolCachePolicy
并且在线时使用默认的NSURLRequestUseProtocolCachePolicy
。 我可以在磁盘上的默认Cache.db
看到请求和响应。 但是,当我脱机时,所有的请求都失败(没有caching的响应(尽pipe看起来已被caching)正被使用/返回。
每个http://nshipster.com/nsurlcache/我初始化didFinishLaunchingWithOptions
的sharedURLCache
,并将AFNetworking setCacheResponse
块设置为这样的:
NSMutableDictionary * mutableUserInfo = [[cachedResponse userInfo] mutableCopy]; NSMutableData * mutableData = [[cachedResponse data] mutableCopy]; NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowed; return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:mutableData userInfo:mutableUserInfo storagePolicy:storagePolicy];
我已经阅读了关于这个主题的这些和其他post:
http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html
我想知道是否有人在使用标准的NSURLCache
之前成功地实现了这个function(对NSURLCache
成功案例也很感兴趣,但是Peter S.说,支持iOS5磁盘caching,因此不再需要SDURLCache
,也就是说,我想使用默认的内置caching)。
提前致谢!
你看到这个post了吗?
AFNetworking(AFHttpClient)离线模式不适用于NSURLRequestReturnCacheDataDontLoad策略
看起来这可能是iOS 6的一个漏洞。毛泽东在这篇文章中不得不说的是:
总结的解决方法是从caching中读取响应,而不是使用NSURLRequestReturnCacheDataDontLoad策略:
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; if (cachedResponse != nil && [[cachedResponse data] length] > 0) { // Get cached data .... }
除非你所有的调用都是100%GET,并且没有副作用或时间依赖性,那么这是危险的。
- 单击UITableview单元格内的search时出现错误的结果
- 如何比较PHAsset到UIImage
- NSPropertyListSerialization propertyListWithData产生不兼容的转换警告/错误
- 长按uiTableView IOS更改单元格的select
- 如果select了单元格,则不调用UICollectionView – didDeselectItemAtIndexPath
- 2 UITableView在UIViewController互相影响
- iOS 9 UITableView单元格的文本标签不是UITableView的全部宽度
- 请求成员tableView不是结构或联合
- 我想在UIView上绘制像苹果形状的自定义形状