AFNetworking 3.0 GET/POST设置acceptedContentTypes并清除图像缓存

Tyr*_*ude 2 video caching image ios afnetworking-3

我在我的项目中使用AFNetworking作为网络层.对于图像我有一些与缓存相关的问题,我将框架更新为3.0版本.

在更新过程中,我遇到了获取媒体内容(图像和视频)的请求的一些问题.

这是我的班级:

+ (void)requestWithMethod:(NSString*)methodTypeValue path:(NSString*)pathValue parameters:(NSDictionary *)params token:(NSString*)token debug:(BOOL)debug completionHandler:(void (^)(id result, NSError *error))block {
    if(debug){
        NSLog(@"Method Type  = %@ \n",methodTypeValue);
        NSLog(@"Link = %@ \n",pathValue);
        NSLog(@"Token = %@", token);
    }

    NSString *linkRequest = [NSString stringWithFormat:@"%@%@",GatewayRoot,pathValue];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:methodTypeValue URLString:linkRequest parameters:nil error:nil];

    [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    if (token) {
       [req setValue:token forHTTPHeaderField:@"AccessToken"];
    }

    [[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (!error) {
                if (debug) {
                    NSLog(@"response:\n %@ \n",responseObject);
                }
            block(responseObject,nil);
        } else {
            NSLog(@"Error: %@, %@, %@", error, response, responseObject);
            block(nil, error);
        }
    }] resume];
}
Run Code Online (Sandbox Code Playgroud)

我做了测试,一切都与正常的请求很好.我必须从服务器获取一些图像和视频,我收到此错误:

NSLocalizedDescription =请求失败:不可接受的内容类型:image/png NSLocalizedDescription =请求失败:不可接受的内容类型:video/mp4

我尝试以这种方式设置内容类型:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"image/jpeg",@"video/mpeg",...nil];

manager.responseSerializer.acceptableContentTypes =[manager.responseSerializer.acceptableContentTypes setByAddingObject:@"image/jpeg",@"video/mpeg",...nil];
Run Code Online (Sandbox Code Playgroud)
  1. 请帮助我如何设置可接受的内容类型?

  2. 我还有其他与图像缓存相关的问题:旧的版本我插入并获取用户配置文件图像,在我退出并重新登录其他凭据后,我收到了相同的用户配置文件图像(我发现这是一个问题,是AFNetworking缓存图像).

你能帮我清除缓存请求流吗?

非常感谢您的帮助!

Rob*_*Rob 5

您可能只想指定适当的内容类型,而不是自己设置可接受的内容类型responseSerializer.例如,如果你想要UIImage,你可以这样做:

manager.responseSerializer = [AFImageResponseSerializer serializer];
Run Code Online (Sandbox Code Playgroud)

如果你想要NSData,你可以这样做:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
Run Code Online (Sandbox Code Playgroud)

如果你不希望你的请求被缓存,则应当设置req.cachePolicyNSURLRequestReloadIgnoringCacheData或实现AFURLSessionManager高速缓存响应块setDataTaskWillCacheResponseBlock.或者,当然,您可以更改服务器,以便那些不应缓存的资源相应地设置其标头字段.