AFNetworking图像下载,不使用AFImageRequestOperation

时间:2014-03-27 22:21:11

标签: ios objective-c cocoa-touch asynchronous afnetworking-2

我想从url下载图像并在响应对象中获取NSData。

这是我设置操作的方式:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer];
responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"image/jpeg"];
manager.responseSerializer = responseSerializer;

AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
[requestSerializer setValue:@"image/jpeg" forHTTPHeaderField:@"Accept"];
[requestSerializer setValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"];
manager.requestSerializer = requestSerializer;

[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSData *data = responseObject;

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];

响应对象总是为nil,url是正确的,当在浏览器中打开它显示图像时,操作描述显示内容长度和内容类型(image / jpeg),但响应对象似乎没有选择它了。

谢谢

答案:而不是responseObject,需要使用operation.reponseData。

1 个答案:

答案 0 :(得分:3)

您需要告诉AFNetworking您希望图像数据和那些应该反序列化的数据。

manager.responseSerializer = [AFImageResponseSerializer serializer];

AFImageResponseSerializer Class Reference

  

默认情况下,AFImageSerializer接受以下MIME类型   对应于UIImage或NSImage支持的图像格式:

image/tiff
image/jpeg
image/gif
image/png
image/ico
image/x-icon
image/bmp
image/x-bmp
image/x-xbitmap
image/x-win-bitmap

  

答案:而不是responseObject,需要使用operation.reponseData。

如果您要使用正确的序列化,它将是responseObject,转换为您可以立即使用的对象。 operation.reponseData包含从服务器发送的原始数据。通常它不是你需要的。