title: UICollectionView loading image only on Scroll
body: <p>Im having a hard time to make UICollectionView Images load after data getting parsed.</p>
  
  <p>This is a LazyTable solution from Apple , and everythings work on tableview but for </p>
  
  <p>CollectionView Image only apear if i scroll. the other data like label or other apears on</p>
  
  <p>Cell without problem only Images gives me a trouble.</p>
  
  <p>here is a reload method inside my delegate :</p>
  
  <pre><code>    __block ParseOperation *weakParser = parser;
  
      parser.completionBlock = ^(void) {
          if (weakParser.appRecordList) {
              dispatch_async(dispatch_get_main_queue(), ^{
                  CategroyScreenViewController *rootViewController = (CategroyScreenViewController*)[(UINavigationController*)self.window.rootViewController topViewController];
  
                  rootViewController.entries = weakParser.appRecordList;
                 [rootViewController.collectionView reloadData];
              });
          }
          self.queue = nil;
      };
  
      [self.queue addOperation:parser]; 
      self.appListData = nil;
  }
  </code></pre>
  
  <p>and this is my CategroyScreenViewController that contain collectionview :</p>
  
  <pre><code>#define kCustomRowCount     7
  
  @interface CategroyScreemViewController () &lt;UIScrollViewDelegate&gt;
  @property (nonatomic, strong) NSMutableDictionary *imageDownloadsInProgress;
  @property (nonatomic) NSMutableArray* numbers;
  @end
  int num = 0;
  @implementation CategroyScreemViewController
  
  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  {
      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
      if (self) {
          // Custom initialization
      }
      return self;
  }
  
  - (void)viewDidLoad
  {
       NSLog(@"view did load");
      [super viewDidLoad];
      self.imageDownloadsInProgress = [NSMutableDictionary dictionary];
      [self.collectionView reloadData];
  
  
  }
  
  - (CGSize) blockSizeForItemAtIndexPath:(NSIndexPath *)indexPath {
  
  
       NSLog(@"Asking for index paths of non-existant cells!! %d", indexPath.row);
  
      if (indexPath.row == 0) return CGSizeMake(2, 2);    
      return CGSizeMake(1, 1);
  }
  - (void) viewDidAppear:(BOOL)animated {
       NSLog(@"viewDidAppear load");
      [self.collectionView reloadData];
  }
  - (UIEdgeInsets)insetsForItemAtIndexPath:(NSIndexPath *)indexPath {
        NSLog(@"insetsForItemAtIndexPath load");
      return UIEdgeInsetsMake(2, 2, 2, 2);
  }
  - (void)didReceiveMemoryWarning
  {
      [super didReceiveMemoryWarning];
      NSArray *allDownloads = [self.imageDownloadsInProgress allValues];
      [allDownloads makeObjectsPerformSelector:@selector(cancelDownload)];
  
      [self.imageDownloadsInProgress removeAllObjects];
  }
  -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
  {
      NSLog(@"numberOfSectionsInCollectionView load");
      return 1;
  }
  
  -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
  {
      NSUInteger count = [self.entries count];
        NSLog(@"numberOfItemsInSection load");
      if (count == 0)
      {
          return kCustomRowCount;
      }
      return count;
  }
  -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
  {
      CategoryScreenCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
      UILabel *label = (UILabel *)[myCell.contentView viewWithTag:10];
      NSUInteger nodeCount = [self.entries count];
      if (nodeCount &gt; 0)
      {
          AppRecord *appRecord = [self.entries objectAtIndex:indexPath.row];
          [label setText:appRecord.appName];
          if (!appRecord.appIcon)
          {
  
              if (self.collectionView.dragging == NO &amp;&amp; self.collectionView.decelerating == NO)
              {
  
                  [self startIconDownload:appRecord forIndexPath:indexPath];
              }
              myCell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];
          }
          else
          {
  
              myCell.imageView.image = appRecord.appIcon;
          }
  
      }
  
      return myCell;
  }
  - (UIColor*) colorForNumber:(NSNumber*)num {
      return [UIColor colorWithHue:((19 * num.intValue) % 255)/255.f saturation:1.f brightness:1.f alpha:1.f];
  }
  - (void)startIconDownload:(AppRecord *)appRecord forIndexPath:(NSIndexPath *)indexPath
  {
      IconDownloader *iconDownloader = [self.imageDownloadsInProgress objectForKey:indexPath];
      if (iconDownloader == nil)
      {
          iconDownloader = [[IconDownloader alloc] init];
          iconDownloader.appRecord = appRecord;
          [iconDownloader setCompletionHandler:^{
  
              CategoryScreenCell *myCell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
              myCell.imageView.image = appRecord.appIcon;
              myCell.imageView.layer.masksToBounds = YES;
              [self.imageDownloadsInProgress removeObjectForKey:indexPath];
  
          }];
          [self.imageDownloadsInProgress setObject:iconDownloader forKey:indexPath];
          [iconDownloader startDownload];
      }
  }
  - (void)loadImagesForOnscreenRows
  {
       NSLog(@"loadImagesForOnscreenRows");
      if ([self.entries count] &gt; 0)
      {
          NSArray *visiblePaths = [self.collectionView indexPathsForVisibleItems];
          for (NSIndexPath *indexPath in visiblePaths)
          {
              AppRecord *appRecord = [self.entries objectAtIndex:indexPath.item];
  
              if (!appRecord.appIcon)
                  // Avoid the app icon download if the app already has an icon
              {
                  [self startIconDownload:appRecord forIndexPath:indexPath];
              }
          }
      }
  }
  
  - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
  {
      NSLog(@"scrollViewDidEndDragging");
  
      if (!decelerate)
      {
          NSLog(@"decelerate");
          [self loadImagesForOnscreenRows];
      }
  }
  
  
  - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  {
      NSLog(@"scrollViewDidEndDecelerating");
      [self loadImagesForOnscreenRows];
  }
  
  @end
  </code></pre>
  
  <p>Ok after Ive changed this :</p>
  
  <pre><code>        CategoryScreenCell *myCell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
  </code></pre>
  
  <p>to this one :</p>
  
  <pre><code>    CategoryScreenCell *myCell = [self.collectionView cellForItemAtIndexPath:indexPath];
  </code></pre>
  
  <p>programs works well , but it gives me this warning :
  "Incompatible pointer types initializing 'CategoryScreenCell *' with an expression of type 
  'UICollectionViewCell *'</p>