title: Async image loading from url inside a UITableView cell - image changes to wrong image while scrolling
body: <p>I've written two ways to async load pictures inside my UITableView cell. In both cases the image will load fine but when I'll scroll the table the images will change a few times until the scroll will end and the image will go back to the right image. I have no idea why this is happening.</p>
  
  <pre><code>#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
  
  - (void)viewDidLoad
  {
      [super viewDidLoad];
      dispatch_async(kBgQueue, ^{
          NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString:
                                                         @"http://myurl.com/getMovies.php"]];
          [self performSelectorOnMainThread:@selector(fetchedData:)
                                 withObject:data waitUntilDone:YES];
      });
  }
  
  -(void)fetchedData:(NSData *)data
  {
      NSError* error;
      myJson = [NSJSONSerialization
                JSONObjectWithData:data
                options:kNilOptions
                error:&amp;error];
      [_myTableView reloadData];
  }    
  
  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
      // Return the number of sections.
      return 1;
  }
  
  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
      // Return the number of rows in the section.
      // Usually the number of items in your array (the one that holds your list)
      NSLog(@"myJson count: %d",[myJson count]);
      return [myJson count];
  }
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  
          myCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
          if (cell == nil) {
              cell = [[myCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
          }
  
          dispatch_async(kBgQueue, ^{
          NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://myurl.com/%@.jpg",[[myJson objectAtIndex:indexPath.row] objectForKey:@"movieId"]]]];
  
              dispatch_async(dispatch_get_main_queue(), ^{
          cell.poster.image = [UIImage imageWithData:imgData];
              });
          });
           return cell;
  }
  </code></pre>
  
  <p>...
  ...</p>
  
  <pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  
              myCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
              if (cell == nil) {
                  cell = [[myCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
              }
      NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myurl.com/%@.jpg",[[myJson objectAtIndex:indexPath.row] objectForKey:@"movieId"]]];
      NSURLRequest* request = [NSURLRequest requestWithURL:url];
  
  
      [NSURLConnection sendAsynchronousRequest:request
                                         queue:[NSOperationQueue mainQueue]
                             completionHandler:^(NSURLResponse * response,
                                                 NSData * data,
                                                 NSError * error) {
                                 if (!error){
                                     cell.poster.image = [UIImage imageWithData:data];
                                     // do whatever you want with image
                                 }
  
                             }];
       return cell;
  }
  </code></pre>