NSURLRequest:总是得到NSCachedURLResponse。

时间:2013-09-06 13:28:54

标签: ios objective-c afnetworking nsurlrequest nsurlcache

我正在使用AfNetworking,我打电话给新数据,但我一直收到缓存的结果。因此,如果我在一个显示数据的VC中,回弹到root并更改我服务器上的数据,然后等待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

1 个答案:

答案 0 :(得分:0)

您描述的行为正是我对您发布的代码的期望。您是否尝试过使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData代替NSURLRequestUseProtocolCachePolicy?根据{{​​3}} NSURLRequestUseProtocolCachePolicy表示:

  

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

因此,如果您希望始终从服务器加载,则应使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData,其描述如下:

  

指定不仅要忽略本地缓存数据,而且要忽略   应指示代理人和其他中间人忽视   他们的缓存只要协议允许。