-->

如何使用NSURLCache返回缓存API响应时脱机(iOS应用)(How to use NSURL

2019-08-18 05:45发布

我希望有人能够摆脱几件事情我一直在研究一些光,但不能使上多大进展。

我想利用NSURLCache的优势来换取API调用我做iOS应用内缓存的响应。 当设备在线,我想返回缓存的响应,如果它足够近,否则从远程读取。 当设备处于脱机状态,我想立即返回缓存响应(如果有的话),无论它的年龄。

我使用AFNetworking 。 API调用,我正在做是我控制的服务器。 协议是HTTPS。 所述Cache-Control响应头目前"max-age=0, public" 。 我目前没有设置高速缓存相关请求头(应该吧?)。 我设置请求的缓存策略是NSURLRequestReturnCacheDataDontLoad脱机时,使用缺省NSURLRequestUseProtocolCachePolicy时在线。 我可以看到在默认情况下,请求及其响应Cache.db在磁盘上。 然而,当我下线的所有请求失败(无缓存的响应(尽管他们看上去已经被缓存)正在使用/返回。

每http://nshipster.com/nsurlcache/我初始化sharedURLCachedidFinishLaunchingWithOptions并设置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];

我读过关于这个专题的这些和其他职位:

http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html

我不知道是否有任何人使用的标准前,已成功实现了这一功能NSURLCache (也有意参与成功案例SDURLCache作为iOS5的磁盘缓存的支持,因此,但彼得S.说SDURLCache不再需要,也就是我想使用内置的缓存,默认值)。

提前致谢!

Answer 1:

你看到这个帖子?

AFNetworking(AFHttpClient)离线模式不能与NSURLRequestReturnCacheDataDontLoad政策工作

看起来它可能是与iOS 6。这里的错误是什么罗伯特毛泽东不得不在后说:

一个总结的解决办法是读取缓存的响应,而不是使用NSURLRequestReturnCacheDataDontLoad政策:

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache]     cachedResponseForRequest:request];
if (cachedResponse != nil &&
    [[cachedResponse data] length] > 0)
{
    // Get cached data
    ....
}


Answer 2:

除非所有来电均为100%GET和自由的副作用或时间依赖性,那么这是危险的。



文章来源: How to use NSURLCache to return cached API responses when offline (iOS App)