Les images de cellule SDWebImage UITableView ne sont pas persistantes

J'utilise la bibliothèque SDWebImage afin de download et mettre en cache des images et d'un service Web de façon asynchronous. Voici la méthode que j'utilise pour download les images:

- (void) downloadThumbnails:(NSURL *)finalUrl { SDWebImageManager *manager = [SDWebImageManager sharedManager]; [manager downloadWithURL:finalUrl options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { if (image) { [self setThumbnail:image]; } }]; } 

Il télécharge avec succès les images du service Web et les affiche dans le tableau. Cependant, il ne persiste pas les images entre les exécutions de l'application. Y at-il autre chose que je dois faire pour mettre en cache les images?

MISE À JOUR: KINDLY ne suggère pas d'utiliser ce qui suit:

 [cell.imageView setImageWithURL:[NSURL URLWithSsortingng:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Parce que, la structure de mon programme est différente. Deuxièmement, si vous lisez la description de la bibliothèque SDWebImage ICI , vous saurez qu'elle peut être utilisée de la façon dont je l'utilise en utilisant SDWebImageManager.

Je soupçonne que la raison pour laquelle le mécanisme de cache dans SDWebImage ne fonctionne pas correctement dans ce cas précis est parce qu'il est basé sur l'URL de l'image.

Ainsi, si vous téléchargez simplement une image et que vous l'atsortingbuez à une partie de la propriété de votre object (comme si vous l'atsortingbuez à une thumbnail ), si vous accédez plus tard à cette propriété, vous contournerez simplement le mécanisme de cache.

Ce que vous pourriez faire pour garder la structure de votre programme est:

  1. stockez le thumbnailURL dans votre object personnel;

  2. Lorsque vous téléchargez l'image pour la première fois, appelez la méthode SDWebImageManager downloadWithURL: comme vous le faites; cela stockera également l'image dans le cache; (ceci que vous faites déjà selon votre code ci-dessus)

  3. make thumbnail une propriété en lecture seule qui accède au cache en récupérant l'image associée à thumbnailURL .

C'est le less de changements que vous devriez faire.

Cela pourrait être une implémentation de la propriété en lecture seule décrite au point 3:

 - (UIImage*)thumbnail { return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL]; } 

self.thumbnailURL est une autre propriété dans votre object où vous enregistrez l'URL de l'image.

J'espère que cela t'aides.

Je pense que vous êtes sur le mauvais path.

Si vous souhaitez utiliser SDWebImage pour UITableView Than Do Following.

1.import UIImageView + WebCache.h par la déclaration suivante où vous avez UITableView

#import <SDWebImage/UIImageView+WebCache.h>

2.Ecrivez la ligne suivante dans la méthode cellForRowAtIndexPath de UITableView

[cell.Logo setImageWithURL: finalUrl placeholderImage:[UIImage imageNamed:@"imagename.png"] options:SDWebImageRefreshCached];

  • Remplacez LOGO par le nom de votre vue d'image dans UITableViewCell
  • imagename.png est le nom de l'image dans le projet qui s'affichera jusqu'à ce que l'image ne soit pas chargée depuis Internet.

Commentez ici si vous rencontrez un problème.

Bonne chance

Je préfère la méthode suivante pour le téléchargement d'image asynchronous dans tableview.
En fait, vous n'avez pas besoin de gérer SDWebImageManager vous-même.

 [cell.imageView setImageWithURL:[NSURL URLWithSsortingng:@"IMAGE_URL"]]; [cell.imageView setImageWithURL:[NSURL URLWithSsortingng:@"IMAGE_URL"] placeholderImage:[UIImage imageNamed:@"LOCAL_IMAGE_NAME"]]; 

Assurez-vous d'avoir importé UIImageView+WebCache.h dans votre implémentation. Le même chargement d'image asynchronous ci-dessus est également disponible pour la catégorie UIButton+WebCache.h et MKAnnotationView+WebCache.m .

La nouvelle version de SDWebImage supporte également l'animation GIF en utilisant la catégorie UIImage+GIF.h
https://github.com/rs/SDWebImage