ios - 缓存在 UIWebView 中不起作用

标签 ios objective-c uiwebview nsurlrequestcachepolicy

我有一个也可以离线使用的网站。我创建了一个使用 UIWebView 的应用程序,我说我的 UIWebView 应该使用以下代码缓存该网站

[self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]];

如果我第一次使用互联网连接启动我的应用程序,我的控制台记录

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 告诉的那样在后台运行),但没有任何反应。我只得到一个白色网站。

为什么网站虽然我设置为缓存,却没有显示在我的屏幕上?

最佳答案

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

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

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

关于ios - 缓存在 UIWebView 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39125591/

相关文章:

ios - NSTimer 不会在 KILLED 背景下触发

ios - 如何像 facebook 应用程序一样快速滑动错误消息?

ios - 如何在 ios 中本地播放 youtube 视频列表

iOS Webview 分享应用

objective-c - 在变量(__fetchedResultsController)之前使用两个下划线?

ios - 在 iOS 设备上通过 ssh 打开应用程序

iphone - 触摸后,Objective C 注释 View 显示缓慢

ios - Google Admob 收到广告但没有显示

ios - 获取从 UIWebView iOS 触发的请求的响应?

iOS AFNetworking downloadProgressBlock 计算返回负数