缓存在UIWebView中不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存在UIWebView中不起作用相关的知识,希望对你有一定的参考价值。
我有一个可以离线使用的网站。我创建了一个使用UIWebView
的应用程序,我说我的UIWebView
应该使用以下代码缓存此站点
[self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]];
如果我第一次使用互联网连接启动我的应用程序,我的console
登录
2016-08-24 15:37:01.713 BrowserApp[1991:345138] applicationDidBecomeActive!
2016-08-24 15:37:01.955 BrowserApp[1991:345138] NSURLRequestUseProtocolCachePolicy
2016-08-24 15:37:22.003 BrowserApp[1991:345138] applicationDidEnterBackground!
2016-08-24 15:37:22.559 BrowserApp[1991:345138] applicationWillEnterForeground!
2016-08-24 15:37:23.075 BrowserApp[1991:345138] applicationDidBecomeActive!
2016-08-24 15:37:37.069 BrowserApp[1991:345138] applicationDidEnterBackground!
2016-08-24 15:37:37.073 BrowserApp[1991:345138] applicationWillTerminate!
我看到每个方法都在文件AppDelegate.m
中调用。我将手机与互联网断开连接,再次启动我的应用程序(不像我的console
告诉的那样在背景中)并没有任何反应。我只得到一个白色的网站。
虽然我设置为website
,为什么cache
不会显示在我的屏幕上呢?
可能是您加载的页面有一个到期日期(可能会设置为立即过期)。尝试将cahce策略设置为NSURLRequestReturnCacheDataElseLoad
(虽然从长远来看可能不太好,因为它永远不会重新加载)。
或者,(更可能)来自网站的响应头可能包含缓存控制头。无论你说什么,该页面仍然可以告诉NSURLRequest它不应该被缓存。
要进行调查,您可以设置断点或在代码中放置一些日志记录来处理接收响应。将NSURLResponse
投射到NSHTTPURLResponse
,然后使用allHeaderFields
查看标题。
看起来像是URLCache的一个bug。当我杀死应用程序,将手机置于飞行模式并重新启动应用程序时,即使响应被缓存,WebViewDelegate
的didFailLoadWithError
也会被调用。
此外,URLCache.shared.cachedResponse(for: urlRequest)
不会返回CachedURLResponse
。
我还检查了Cache.db,它包含已保存的响应和资产。
奇怪!
以上是关于缓存在UIWebView中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UIWebview loadRequest 仅在 iPhone X 中不起作用
reCAPTCHA 在 iOS 10 UIWebView 中不起作用