0

我正在使用 AfNetworking,我调用了新数据,但我一直在获取缓存的结果。因此,如果我在显示数据的 VC 中,弹出回根目录并更改服务器上的数据,然后等待 30 秒,当我推回 VC 时,我会看到旧数据。如果我在浏览器中点击 URL,我会看到正确的数据。如果我重新运行该应用程序,我将看到数据的更改。

我的服务器响应发回缓存控制标头:Cache-Control:max-age=10, public

据我所知,我总是得到一个 NSCachedURLResponse 并且缓存没有监听我的缓存控制策略。

在我的 AppDelegate 中,我设置了 SharedURLCache:

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

我如何设置 URLRequest:

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];

我没有做任何涉及 NSURLCache 的事情。

有任何想法吗?

BooRanger

4

1 回答 1

0

您描述的行为正是我对您发布的代码的期望。您是否尝试过使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData而不是NSURLRequestUseProtocolCachePolicy?根据这个 NSURLRequestUseProtocolCachePolicy意思:

指定协议实现中定义的缓存逻辑(如果有)用于特定的 URL 加载请求。这是 URL 加载请求的默认策略。

因此,如果您希望它始终从服务器加载,您应该使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData描述为:

指定不仅应忽略本地缓存数据,而且应指示代理和其他中间体在协议允许的范围内忽略其缓存。

于 2013-09-06T13:34:41.953 回答