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:
stockez le thumbnailURL
dans votre object personnel;
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)
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]; }
où 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];
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