重新启动后NSURLCache无法从磁盘加载

时间:2014-01-29 01:18:35

标签: ios caching cordova uiwebview nsurlcache

我正在使用Cordova / Phonegap构建一个iOS应用程序,它基本上有一个UIWebView并从外部资源加载我的Web应用程序。 (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查看请求,如果App加载一次,所有重新加载都会将304,Not Modified返回到该文件

以下是问题

每次打开iOS App时,虽然文件位于缓存文件夹中,但它会从服务器再次加载并保存最新版本; if-modified-since在打开后未在第一个请求中设置为request参数,但是以下是。

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

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

更多信息:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

要解决此问题,您必须阻止CDVUserAgent设置UserAgent,但它可能会影响对本地文件的限制。就我而言,从服务器检索来源。