jakemarsh / JMImageCache

NSCache based remote-image caching and downloading mechanism for iOS.

Home Page:http://deallocatedobjects.com/2011/02/19/introducing-jmimagecache/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

setImageWithURL:key:placeholder:completionBlock: calls itself - EXC_BAD_ACCESS

afarber opened this issue · comments

There seems a bug in JMImageCache where setImageWithURL:key:placeholder:completionBlock: calls itself, exhausting the stack and resulting in app crash "Thread 1: EXC_BAD_ACCESS"

Please see the
http://stackoverflow.com/questions/21063896/jmimagecache-in-a-simple-test-app-crashes-with-exc-bad-access/21064304
for a short app to reproduce it:

#import "ViewController.h"
#import "JMImageCache.h"

static NSString* const kAvatar = @"http://gravatar.com/avatar/55b3816622d935e50098bb44c17663bc.png";

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
            placeholder:[UIImage imageNamed:@"male.png"]];
}

@end

xcode

it also happens to me also...

It happens for me as well, so I've found a workaround:
NSURL *videoImageURL = [NSURL URLWithString:imageURLString];
if ([[JMImageCache sharedCache] cachedImageForURL:videoImageURL])
{
//Put the correct image in the first instance itself
cell.thumbnailImage.image = [[JMImageCache sharedCache] cachedImageForURL:videoImageURL];
}
else
{
//Put the placeholder image and then invoke download of image
cell.thumbnailImage.image = [UIImage imageNamed:@"nectar_points_background_NEW"];
[[JMImageCache sharedCache] imageForURL:videoImageURL completionBlock:^(UIImage *downloadedImage) {
cell.thumbnailImage.image = downloadedImage;
}];
}