0

我有一个网站也可以离线使用。我创建了一个应用程序,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

4

2 回答 2

1

似乎是 URLCache 的错误。当我杀死应用程序,将手机置于飞行模式并重新启动应用程序时,即使响应已缓存,也会调用WebViewDelegate's 。didFailLoadWithError

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

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

奇怪!

于 2018-08-31T05:36:05.820 回答
1

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

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

要进行调查,您可以设置断点或将一些日志记录在您处理的代码中确实收到响应。将NSURLResponse转换为 anNSHTTPURLResponse然后使用 . 查看标题allHeaderFields

于 2016-08-24T15:05:57.890 回答