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 prefer the following method for asynchronous image downloading in tableview.
Actually, you don't need to handle
SDWebImageManager
yourself.Make sure you imported the
UIImageView+WebCache.h
in your implementation. The same above asynchronous image loading is also available forUIButton+WebCache.h
category andMKAnnotationView+WebCache.m
category.The new version of SDWebImage also supports the GIF animation using
UIImage+GIF.h
categoryhttps://github.com/rs/SDWebImage
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 tothumbnail
), 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:
store the
thumbnailURL
in yourself
object;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)make
thumbnail
a read-only property that accesses the cache retrieving the image associated tothumbnailURL
.This is the least amount of changes you should do.
This could be an implementation of the read-only property described at point 3:
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
forUITableView
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];
Comment here if u face any problem.
All the best