iOS 11:强制UIWebView在离线时使用缓存(NSURLCache)

时间:2018-02-21 16:59:58

标签: caching uiwebview ios11 nsurlsession nsurlcache

从iOS 11开始,当设备处于脱机状态时,网络请求通常会在“The Internet connection appears to be offline.” error message (code -1009)时快速失败。以前 - 就像iOS版本的情况一样; 11 - 请求首先尝试通过URL加载系统(部分)。

要在离线时向UIWebViews提供内容,我依赖于NSURLCache的自定义子类,它首先返回缓存数据,然后在后台从服务器请求实际资源(仅在需要时) / updated),存储下一个请求。

我想强制我的应用 - 特别是我想要脱机工作的UIWebView - 仍然通过网址加载系统,以便我的自定义NSURLCache被要求每次缓存响应(如iOS 11之前的情况)。这可能吗?

更多背景

当设备没有互联网连接时,请求尝试在iOS 11上立即失败,而操作系统也将waitsForConnectivity-flag引入NSURLSession。这正是我想要的。但是,这仅适用于我加载单个文件的简单请求,并且我能够轻松地从NSURLConnection - 请求移植到NSURLSession - 请求。

UIWebView仍然使用NSURLConnection,因此我无法使用NSURLSessionwaitsForConnectivity。但是:还有另一种方法可以强制通过URL加载系统并点击我的自定义NSURLCache实现吗?

在我的网页浏览量中,我只是请求这样的网页:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@“some/url.html" relativeToURL:[NSURL URLWithString:@“https://www.example.com/"]] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
[self.webView loadRequest:request];

所以,上面的内容曾经起作用,仍适用于iOS版本< 11. iOS 11没有运气。 我为cachePolicy参数尝试了多个值,包括NSURLRequestReturnCacheDataDontLoad。仍然没有运气。

并不像加载/请求单个HTML文件那么简单。页面有很多资源:CSS文件,JS,图像等。这些都是我的自定义NSURLCache透明缓存的。不幸的是,iOS 11已经没有了。

(现在:我首先使用NSURLCache的自定义子类,因为无论配置如何NSURLCache我都无法依赖标准cachePolicy实现设置。如果有人对我的问题有不同解决方案的建议(没有自定义NSURLCache),我肯定在听。)

0 个答案:

没有答案