ios - 重新启动后 NSURLCache 未从磁盘加载

标签 ios caching cordova uiwebview nsurlcache

我正在使用 Cordova/Phonegap 构建一个 iOS 应用程序,它基本上有一个 UIWebView 并从外部资源加载我的网络应用程序。 (iOS6+)

此 Web 应用程序需要 450kb 的 HTML 才能运行,我希望在没有更改时缓存此文件。 (每隔一周更改一次)

为此,我在初始化期间在我的 AppDelegate 中设置了一个 NSURLCache:

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
                                                      diskCapacity:20 * 1024 * 1024
                                                          diskPath:nil];
 [NSURLCache setSharedURLCache:URLCache];

加载应用程序后,文件现在正在缓存,我可以在 Library/Caches/APPName/fsCachedData 上找到它们。

我正在使用 CharlesProxy 查看请求,如果应用程序加载一次,所有重新加载都会返回 304,未修改,到该文件

问题来了

每次我打开iOS App,虽然文件在缓存文件夹中,但它会从服务器重新加载并保存最新版本; if-modified-since在打开后的第一个请求中没有设置为请求参数,而是后面的。

我不确定我是否需要明确要求 Xcode 从磁盘加载 NSURLCache,或者我没有正确设置它。

任何人都可以看到过程中的问题吗?

更多信息:

缓存控制是私有(private)的,max-age=31536000,必须重新验证。 NSURLRequest cachePolicy 是 NSURLRequestUseProtocolCachePolicy。

谢谢!

最佳答案

问题是由 CordovaLibrary 引起的。它有一个 CDVURLProtocol 和 CDVUserAgent,它们拦截请求,与现有信息冲突。

要解决此问题,您必须阻止 CDVUserAgent 设置 UserAgent,但这可能会影响对本地文件的限制。在我的例子中,源是从服务器检索的。

关于ios - 重新启动后 NSURLCache 未从磁盘加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420254/

相关文章:

iphone - ios Kill 应用程序问题

ios - 月份标题没有向左移动 FSCALENDAR

ios - 是否可以为 Collection View 添加拖动以水平重新加载?

iphone - 如何创建持久的 iPhone 缓存

caching - TCP级冗余消除

java - PhoneGap 3.1 Android 将音频文件从 www 文件夹复制到 SD 卡

ios - UIGestureRecognizer 和 UITableViewCell 问题

docker - 版本增加React应用时如何使用Docker构建缓存?

android - Google Play 商店发布问题

javascript - 使用 Objective-C 将 JSON 解析为 C 风格的字符数组