Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS

Code Challenge: Connecting to an API Challenge Task 1

Can some one please help me with this code? I'm not seeing what I'm doing wrong.

Any help is much appreciated!

Challenge is: It looks like we've written a bug. When we set our image on the image view, it's not working quite right. Fix this by setting the image on the image view using the main queue.

import "AwesomeViewController.h"

@implementation AwesomeViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:@"http://blog.teamtreehouse.com/wp-content/themes/treehouse/images/logo-blog2x.png"];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    NSURLSession *session = [NSURLSession sharedSession];

    NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request 
                     completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
        NSData *data = [[NSData alloc] initWithContentsOfURL:location];
        UIImage *image = [[UIImage alloc] initWithData:data];
    dispatch_async(dispatch_get_main.queue(),^{self.imageView.image = image;});
    }];

    [task resume];
}

@end

1 Answer

Hey Christian,

you almost did it right, there is just a little typo in your code.

If you put "dispatch_get_main_queue" instead of "dispatch_get_main.queue" it will pass the challenge...

It should look like the following:

import "AwesomeViewController.h"

@implementation AwesomeViewController

  • (void)viewDidLoad { [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:@"http://blog.teamtreehouse.com/wp-content/themes/treehouse/images/logo-blog2x.png"];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; NSURLSession *session = [NSURLSession sharedSession];

    NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { NSData *data = [[NSData alloc] initWithContentsOfURL:location]; UIImage *image = [[UIImage alloc] initWithData:data];

            dispatch_async(dispatch_get_main_queue(), ^{
        self.imageView.image = image;
    });  
    

    }];

    [task resume]; }

@end

Cheers Daniel