AFNetworking - 不缓存响应

sol*_*eil 17 json caching ios afnetworking afnetworking-2

我正在使用此代码从服务器中提取一个简单的JSON提要:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager GET:kDataUrl parameters:nil
 success:^(AFHTTPRequestOperation *operation, id responseObject) {
     NSLog(@"response: %@", responseObject);
 }
 failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"JSON DataError: %@", error);
 }];
Run Code Online (Sandbox Code Playgroud)

有用.但是,在我更改kDataUrl上的JSON文件并验证是否在浏览器中进行了更改后,当我再次运行应用程序时,我仍然得到之前的响应.

似乎AFNetworking以某种方式缓存了旧的响应.我不想要这种行为.我想下载当前的Feed.是否需要设置一些设置或参数来关闭缓存?

gra*_*n33 58

长话短说,只需定义您的AFNetworking经理:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
Run Code Online (Sandbox Code Playgroud)

请享用!

  • 实际上,有这个解决方案正在发挥作用. (3认同)
  • 使用新的AFNetworking库版本,您可以将其设置为url会话配置对象.`NSURLSessionConfiguration*configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; configuration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;` (2认同)

Cou*_*per 12

您遇到的是URL缓存的影响(请参阅NSURLCache).

可以通过为NSMutableURLRequest对象设置"缓存策略"来定义请求的缓存行为,例如:

NSMutableURLRequest* request = ...;
[request setCachePolicy: myCachePolicy];
Run Code Online (Sandbox Code Playgroud)

默认缓存行为(NSURLRequestUseProtocolCachePolicy)适用于当前协议,即HTTP.对于HTTP协议,默认情况下将缓存GET请求!

并且,AFNetworking不会更改请求的默认行为!

现在,您可以设置另一个缓存策略,例如:

NSURLRequestReloadIgnoringLocalCacheData

指定应从原始源加载URL加载的数据.不应使用现有的缓存数据来满足URL加载请求.

这可能是您想要实现的期望行为:

[request setCachePolicy: NSURLRequestReloadIgnoringLocalCacheData];
Run Code Online (Sandbox Code Playgroud)

这里的问题是,超级"方便"的API没有提供配置请求的URL缓存行为的方法.您根本无法访问使用过的请求.

因此,我建议使用较低级别的API,您可以控制所创建的NSMutableURLRequest对象,并相应地设置缓存策略.