afnetworking 2 setImageWithUrl自定义响应类型图像/jpeg



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"]];

最新更新