缓存在UIWebView中不起作用

时间:2016-08-24 14:06:35

标签: ios objective-c uiwebview nsurlrequestcachepolicy

我有一个可以离线使用的网站。我创建了一个使用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,但我的屏幕上不会显示?

2 个答案:

答案 0 :(得分:1)

可能是您加载的页面有一个到期日期(可能会设置为立即过期)。尝试将cahce策略设置为NSURLRequestReturnCacheDataElseLoad(虽然从长远来看可能不太好,因为它永远重新加载)。

或者,(更可能)来自网站的响应头可能包含缓存控制头。无论你说什么,该页面仍然可以告诉NSURLRequest它不应该被缓存。

要进行调查,您可以设置断点或在代码中放置一些日志记录来处理接收响应。将NSURLResponse投射到NSHTTPURLResponse,然后使用allHeaderFields查看标题。

答案 1 :(得分:1)

似乎是URLCache的错误。当我终止该应用程序时,将手机置于飞行模式并重新启动该应用程序,即使响应被缓存,WebViewDelegate的{​​{1}}也会被调用。

didFailLoadWithError也不会返回URLCache.shared.cachedResponse(for: urlRequest)

我还检查了Cache.db,其中包含已保存的响应和资产。

怪异!