从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,因此我无法使用NSURLSession
和waitsForConnectivity
。但是:还有另一种方法可以强制通过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
),我肯定在听。)