我有一个可以离线使用的网站。我创建了一个使用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
,但我的屏幕上不会显示?
答案 0 :(得分:1)
可能是您加载的页面有一个到期日期(可能会设置为立即过期)。尝试将cahce策略设置为NSURLRequestReturnCacheDataElseLoad
(虽然从长远来看可能不太好,因为它永远重新加载)。
或者,(更可能)来自网站的响应头可能包含缓存控制头。无论你说什么,该页面仍然可以告诉NSURLRequest它不应该被缓存。
要进行调查,您可以设置断点或在代码中放置一些日志记录来处理接收响应。将NSURLResponse
投射到NSHTTPURLResponse
,然后使用allHeaderFields
查看标题。
答案 1 :(得分:1)
似乎是URLCache的错误。当我终止该应用程序时,将手机置于飞行模式并重新启动该应用程序,即使响应被缓存,WebViewDelegate
的{{1}}也会被调用。
didFailLoadWithError
也不会返回URLCache.shared.cachedResponse(for: urlRequest)
。
我还检查了Cache.db,其中包含已保存的响应和资产。
怪异!