im使用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"
您可以在UIImageView实例上设置自己的ImagerPonseserializer:
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"]
];
我找到了一种设置一个可接受的MIME类型以进行图像序列化的方法,尽管它有点黑。UIImageView+AFNetworking
为用户提供默认的AFImageResponseSerializer
,事实证明,除非设置自定义序列化器,否则在所有UIImageView
实例中共享默认实例。
在应用程序启动时执行此代码将修改所有图像视图的默认行为:
AFImageResponseSerializer *serializer =
[[[UIImageView alloc] init] imageResponseSerializer];
NSSet *mimeTypes = [serializer.acceptableContentTypes
setByAddingObjectsFromArray:@[@"image/pjpeg", @"image/x-png"]];
[serializer setAcceptableContentTypes:mimeTypes];
这种方法对我来说非常有效,但是请注意,这不依赖于任何公共合同,并且可能会改变以后的版本。如果您选择使用此信息,使用单位测试确保了实例确实共享。
如果您执行
之类的东西,该方法也会破裂imageView.imageResponseSerializer = [[AFImageResponseSerializer alloc] init];
因为它将用未修改的默认行为替换共享实例。
对于使用Afnetworking 3.0的人,您可以简单地更新共享的sessionmanager上的响应式序列化器。
AFImageResponseSerializer* serializer = (AFImageResponseSerializer*) [UIImageView sharedImageDownloader].sessionManager.responseSerializer;
serializer.acceptableContentTypes = [serializer.acceptableContentTypes setByAddingObject:@"image/jpg"];
如果您使用的是restkit或afnetworking 1.3使用
[AFImageRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"image/pjpeg"]];