简体   繁体   中英

SDWebImage UITableView Cell Images Not Persisting

I am using SDWebImage library in order to download and cache images and from a web service asynchronously. Following is the method i use to download the 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];
         }
     }];

}

It is successfully downloading the images from the web service and showing them in the tableview. However its not persisting the images between application runs. Is there anything else i need to do in order to cache the images??

UPDATE: KINDLY DO NOT suggest to use the following:

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

Because, the structure of my program is different. Secondly, if you read description of the SDWebImage library HERE , you will get to know that it can be used the way i am using it using SDWebImageManager.

I suspect that the reason why the cache mechanism in SDWebImage is not working correctly in this specific case is because it is based on the image URL.

So, if you just download an image and assign it to some of your object's property (like you are doing assigning it to thumbnail ), if you later access that property if will simply walk around the cache mechanism.

What you could do to keep the structure of your program is:

  1. store the thumbnailURL in your self object;

  2. when you download the image the first time, call SDWebImageManager downloadWithURL: method as you are doing; this will also store the image in the cache; (this you are already doing as per your code above)

  3. make thumbnail a read-only property that accesses the cache retrieving the image associated to thumbnailURL .

This is the least amount of changes you should do.

This could be an implementation of the read-only property described at point 3:

- (UIImage*)thumbnail {

    return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL];
}

where self.thumbnailURL is another property in your object where you save the image URL.

Hope this helps.

I think you are on wrong path.

If you want to use SDWebImage for UITableView Than Do Following.

1.import UIImageView+WebCache.h by following statement where u have UITableView

#import <SDWebImage/UIImageView+WebCache.h>

2.Write following line in cellForRowAtIndexPath method Of UITableView

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

  • Replace LOGO with name of your image view in UITableViewCell
  • imagename.png is name of image in project which will display till image not load from internet.

Comment here if u face any problem.

All the best

i prefer the following method for asynchronous image downloading in tableview.
Actually, you don't need to handle SDWebImageManager yourself.

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

Make sure you imported the UIImageView+WebCache.h in your implementation. The same above asynchronous image loading is also available for UIButton+WebCache.h category and MKAnnotationView+WebCache.m category.

The new version of SDWebImage also supports the GIF animation using UIImage+GIF.h category
https://github.com/rs/SDWebImage

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM