2016-01-25 1 views
0

Je lis à peu près NSURLSession et je l'ai utilisé pour télécharger des images à partir d'une url.Here-à-dire la méthode que j'ai écrit:NSURLSession avec UICollectionView

-(void)startDownloadingWithURLString:(NSString*)urlString andDisplayOn:(UIImageView*)imageView{ 

      NSURL *url = [NSURL URLWithString:urlString]; 
      NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

      NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; 
      NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:configuration]; 
      NSLog(@"%@",dataResponse); 
      NSURLSessionDownloadTask *task = [urlSession downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

        UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]]; 

        dispatch_async(dispatch_get_main_queue(), ^{ 

        imageView.image = image; 
       }); 
      }]; 
      [task resume]; 
     } 

Maintenant, le problème est que j'appelle cette méthode à l'intérieur "cellForItemAtIndexPath:". Donc, au fil du temps je défile, cette méthode est appelée encore et encore pour chaque cellule (concept de réutilisation). Maintenant, comme le processus de téléchargement est asynchrone, je ne peux pas savoir quand le téléchargement est terminé.

Alors, que dois-je faire pour éviter ce problème? Je veux juste télécharger des images une fois.

+0

Utiliser une option existante, comme SDWebImage – Wain

+0

Comme je commence juste à connaître ces concepts, j'aimerais avoir une solution sans utiliser de classes tierces existantes. J'apprécierais une solution plus logique. – Reckoner

+0

http://stackoverflow.com/questions/11511548/best-way-to-cache-images-on-ios-app référer ce lien. Il vous aidera. –

Répondre

0

Des bibliothèques tierces sont disponibles pour résoudre votre problème. Je préfère utiliser SDWebImage pour le même. Cela a fonctionné comme un charme pour moi.

Tout importer

#import<SDWebImage/UIImageView+WebCache.h> 

et vous pouvez utiliser la méthode pour charger l'image web

sd_setImageWithURL: 

Il fait le même travail pour vous, sans agitation. Référer ce lien https://github.com/rs/SDWebImage J'espère que ça aide. Codage Hapy ..