How to download image with AFNetworking 2.0?
Asked Answered
C

3

51

Appareantly there is no AFImageRequestOperation, but only AFImageResponseSerializer and frankly I don't get it or maybe I'm just looking too long through AFNetworking site... Downloading images with previous AFNetworking was like a charm. I'd hate to go back to older AFnetworking, since I did almost all stuff via the new version... Anyone?

Conoid answered 21/10, 2013 at 18:9 Comment(0)
S
126

SO you want something like this for 2.0.

AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response: %@", responseObject);
    _imageView.image = responseObject;

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Image error: %@", error);
}];
[requestOperation start];

As mentioned by Adam you can also do something like the below if you are just wanting to throw it into an imageView

[myImageView setImageWithURL:[NSURL URLWithString:@"http://sitewithimage.com/images/myimage.png"]];
Shank answered 21/10, 2013 at 18:41 Comment(5)
Would this be on the main queue or the background queue?Outgrowth
@Tander The completion blocks run on the main queueShank
This answer's great and all, but check out github.com/AFNetworking/AFNetworking/blob/master/…, a lot of donkey work done for you if you're just putting an image in an image viewQuartersaw
@AdamWaite thanks, I updated my answer with a generic version, however if someone would like to use placeholders and such you can look at all the options in the linkShank
Bot's answer that the completion block is correct, though simplifying just a little. There's a completionQueue property on AFURLConnectionOperation that you can use to specify the queue used. The default is the main queue. :)Burglary
C
4

for old version, there is no responseSerializer, you can also

AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
//requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response: %@", responseObject);
    _imageView.image = [UIImage imageWithData:responseObject];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Image error: %@", error);
}];
[requestOperation start];
Cecilia answered 24/4, 2014 at 21:17 Comment(0)
G
0

For people using AFNetworking in Swift, above solution can be written as below

    let requestOperation : AFHTTPRequestOperation = AFHTTPRequestOperation(request: urlRequest)
    requestOperation.responseSerializer = AFImageResponseSerializer()

    requestOperation.setCompletionBlockWithSuccess({ (requestOperation, responseObject) in
       print(responseObject)
        _imageView.image = responseObject as? UIImage

    }) { (requestOperation, error) in
       print(error)
    }
    requestOperation.start()
Gott answered 29/6, 2016 at 11:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.