【问题标题】:NSURLCache not loading from disk after relaunch重新启动后 NSURLCache 未从磁盘加载
【发布时间】:2014-02-20 14:48:23
【问题描述】:

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

这个网络应用程序需要一个 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 或者我没有正确设置它。

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

更多信息:

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

谢谢!

【问题讨论】:

    标签: ios caching cordova uiwebview nsurlcache


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 2018-04-11
      • 2016-11-15
      • 1970-01-01
      • 2011-12-15
      • 2017-08-22
      • 2019-04-20
      相关资源
      最近更新 更多