Skip to content

Commit

Permalink
Clean delegates even on failed downloads
Browse files Browse the repository at this point in the history
  • Loading branch information
Olivier Poitrey committed Mar 21, 2011
1 parent 3116810 commit 44fd728
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
40 changes: 38 additions & 2 deletions SDWebImageManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,19 @@ - (void)imageDownloader:(SDWebImageDownloader *)downloader didFinishWithImage:(U
{
id<SDWebImageManagerDelegate> delegate = [delegates objectAtIndex:idx];

if (image && [delegate respondsToSelector:@selector(webImageManager:didFinishWithImage:)])
if (image)
{
[delegate performSelector:@selector(webImageManager:didFinishWithImage:) withObject:self withObject:image];
if ([delegate respondsToSelector:@selector(webImageManager:didFinishWithImage:)])
{
[delegate performSelector:@selector(webImageManager:didFinishWithImage:) withObject:self withObject:image];
}
}
else
{
if ([delegate respondsToSelector:@selector(webImageManager:didFailWithError:)])
{
[delegate performSelector:@selector(webImageManager:didFailWithError:) withObject:self withObject:nil];
}
}

[downloaders removeObjectAtIndex:idx];
Expand Down Expand Up @@ -168,5 +178,31 @@ - (void)imageDownloader:(SDWebImageDownloader *)downloader didFinishWithImage:(U
[downloader release];
}

- (void)imageDownloader:(SDWebImageDownloader *)downloader didFailWithError:(NSError *)error;
{
[downloader retain];

// Notify all the delegates with this downloader
for (NSInteger idx = [downloaders count] - 1; idx >= 0; idx--)
{
SDWebImageDownloader *aDownloader = [downloaders objectAtIndex:idx];
if (aDownloader == downloader)
{
id<SDWebImageManagerDelegate> delegate = [delegates objectAtIndex:idx];

if ([delegate respondsToSelector:@selector(webImageManager:didFailWithError:)])
{
[delegate performSelector:@selector(webImageManager:didFailWithError:) withObject:self withObject:error];
}

[downloaders removeObjectAtIndex:idx];
[delegates removeObjectAtIndex:idx];
}
}

// Release the downloader
[downloaderForURL removeObjectForKey:downloader.url];
[downloader release];
}

@end
1 change: 1 addition & 0 deletions SDWebImageManagerDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
@optional

- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image;
- (void)webImageManager:(SDWebImageManager *)imageManager didFailWithError:(NSError *)error;

@end

0 comments on commit 44fd728

Please sign in to comment.