diff --git a/AsyncDisplayKit/ASNetworkImageNode.h b/AsyncDisplayKit/ASNetworkImageNode.h index 1d7134ca64..82513a8c55 100644 --- a/AsyncDisplayKit/ASNetworkImageNode.h +++ b/AsyncDisplayKit/ASNetworkImageNode.h @@ -95,6 +95,16 @@ NS_ASSUME_NONNULL_BEGIN @optional +/** + * Notification that the image node failed to download the image. + * + * @param imageNode The sender. + * @param error The error with details. + * + * @discussion Called on a background queue. + */ +- (void)imageNode:(ASNetworkImageNode *)imageNode didFailWithError:(NSError *)error; + /** * Notification that the image node finished decoding an image. * diff --git a/AsyncDisplayKit/ASNetworkImageNode.mm b/AsyncDisplayKit/ASNetworkImageNode.mm index cbba35af9c..5c5c8f37be 100755 --- a/AsyncDisplayKit/ASNetworkImageNode.mm +++ b/AsyncDisplayKit/ASNetworkImageNode.mm @@ -168,14 +168,14 @@ _cacheUUID = nil; } -- (void)_downloadImageWithCompletion:(void (^)(CGImageRef))finished +- (void)_downloadImageWithCompletion:(void (^)(CGImageRef, NSError*))finished { _imageDownload = [_downloader downloadImageWithURL:_URL callbackQueue:dispatch_get_main_queue() downloadProgressBlock:NULL completion:^(CGImageRef responseImage, NSError *error) { if (finished != NULL) { - finished(responseImage); + finished(responseImage, error); } }]; } @@ -210,7 +210,7 @@ } } else { __weak __typeof__(self) weakSelf = self; - void (^finished)(CGImageRef) = ^(CGImageRef responseImage) { + void (^finished)(CGImageRef, NSError *) = ^(CGImageRef responseImage, NSError *error) { __typeof__(self) strongSelf = weakSelf; if (strongSelf == nil) { return; @@ -232,6 +232,9 @@ if (responseImage != NULL) { [strongSelf->_delegate imageNode:strongSelf didLoadImage:strongSelf.image]; } + else if (error && [strongSelf->_delegate respondsToSelector:@selector(imageNode:didFailWithError:)]) { + [strongSelf->_delegate imageNode:strongSelf didFailWithError:error]; + } }; if (_cache != nil) { @@ -247,7 +250,7 @@ if (image == NULL && _downloader != nil) { [self _downloadImageWithCompletion:finished]; } else { - finished(image); + finished(image, NULL); } };