我正在使用AFNetworking 2.我有一个UITableview
,每行包含一个图像。
问题是响应类型为image/pjpeg
,默认情况下不是可接受的类型。为了解决这个问题,我在599行左右修改了AFURLResponseSerialization.m
。将此内容类型添加到self.acceptableContentTypes
声明的末尾。
我不想修改源代码。在2.x中有没有正确的方法呢?
NSString *url = [NSString stringWithFormat:@"%@my/images/%@",BaseUrl,[o objectForKey:@"ID"]];
[cell.imageView setImageWithURL:[NSURL URLWithString:url]
placeholderImage:[UIImage imageNamed:@"placeholder"]
];
这似乎不再奏效:
[AFImageRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"image/jpeg"]]
我可以使用以下代码看到错误:
NSURLRequest *urlRequest = [NSURLRequest requestWithURL: [NSURL URLWithString: url]];
__weak UITableViewCell *weakCell = cell;
[cell.imageView setImageWithURLRequest:urlRequest
placeholderImage:[UIImage imageNamed:@"placeholder"]
success: ^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
__strong UITableViewCell *strongCell = weakCell;
strongCell.imageView.image = image;
[tableView reloadRowsAtIndexPaths: @[indexPath]
withRowAnimation: UITableViewRowAnimationNone];
NSLog(@"Your image request succeeded!");
} failure: ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"Your image request failed...");
NSLog(@"Error: %@", error);
NSLog(@"Error: %@", response);
}
];
这是错误:
Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: image/pjpeg"
答案 0 :(得分:13)
您可以在UIImageView实例上设置自己的imageResponseSerializer:
AFImageResponseSerializer *serializer = [[AFImageResponseSerializer alloc] init];
serializer.acceptableContentTypes = [serializer.acceptableContentTypes setByAddingObject:@"image/pjpeg"];
cell.imageView.imageResponseSerializer = serializer;
NSString *url = [NSString stringWithFormat:@"%@my/images/%@",BaseUrl,[o objectForKey:@"ID"]];
[cell.imageView setImageWithURL:[NSURL URLWithString:url]
placeholderImage:[UIImage imageNamed:@"placeholder"]
];
答案 1 :(得分:2)
我找到了一种为图像序列化设置一次接受的MIME类型的方法,虽然它有点hacky。 UIImageView+AFNetworking
为用户提供了default AFImageResponseSerializer
,除非设置了自定义序列化工具,否则它会在所有UIImageView
个实例中生成默认instance is shared。
在应用启动时执行此代码将修改所有图片视图的默认行为:
AFImageResponseSerializer *serializer =
[[[UIImageView alloc] init] imageResponseSerializer];
NSSet *mimeTypes = [serializer.acceptableContentTypes
setByAddingObjectsFromArray:@[@"image/pjpeg", @"image/x-png"]];
[serializer setAcceptableContentTypes:mimeTypes];
这种方法对我来说非常有效,但请注意,这并不依赖于任何公共合同,并且可能会在未来的版本中发生变化。如果您选择使用此功能,将此功能用于单元测试,以确保实际共享实例。
如果执行类似
的操作,该方法也会中断imageView.imageResponseSerializer = [[AFImageResponseSerializer alloc] init];
因为它将使用未修改的默认行为替换共享实例。
答案 2 :(得分:1)
如果您使用的是RestKit或AFNetworking 1.3,请使用
[AFImageRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"image/pjpeg"]];
答案 3 :(得分:1)
对于使用AFNetworking 3.0的用户,您只需在共享会话管理器上更新responseSerializer。
AFImageResponseSerializer* serializer = (AFImageResponseSerializer*) [UIImageView sharedImageDownloader].sessionManager.responseSerializer;
serializer.acceptableContentTypes = [serializer.acceptableContentTypes setByAddingObject:@"image/jpg"];