[WEEX-460][iOS] Fix ImageComponent with placeholder of URL cannot display 
placeholder if main image cannot be downloaded.


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/91d71348
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/91d71348
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/91d71348

Branch: refs/heads/release
Commit: 91d713481c64a9cb0eb2eae4e557495ae61d8660
Parents: 0935d64
Author: 神漠 <[email protected]>
Authored: Wed Jun 13 21:10:49 2018 +0800
Committer: Adam Feng <[email protected]>
Committed: Thu Jun 14 14:54:15 2018 +0800

----------------------------------------------------------------------
 .../Sources/Component/WXImageComponent.m        | 24 ++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/91d71348/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m 
b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index c3dbcc2..8ab354b 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -382,10 +382,22 @@ WX_EXPORT_METHOD(@selector(save:))
             // progress when loading image
         } completed:^(UIImage *image, NSError *error, WXImageLoaderCacheType 
cacheType, NSURL *imageURL) {
             __strong typeof(weakSelf) strongSelf =  weakSelf;
-            weakSelf.imageDownloadFinish = YES;
+            if (strongSelf == nil) {
+                return;
+            }
+            
+            strongSelf.imageDownloadFinish = YES;
             if (error) {
                 // log error message for error
                 WXLogError(@"Error downloading image: %@, detail:%@", 
imageURL.absoluteString, [error localizedDescription]);
+                
+                // retry set placeholder, maybe placeholer image can be 
downloaded
+                if (strongSelf.placeholdSrc) {
+                    NSString *newURL = [strongSelf.placeholdSrc copy];
+                    WX_REWRITE_URL([strongSelf placeholdSrc], 
WXResourceTypeImage, strongSelf.weexInstance)
+                    [[strongSelf imageLoader] 
setImageViewWithURL:(UIImageView*)strongSelf.view url:[NSURL 
URLWithString:newURL] placeholderImage:nil options:nil progress:nil 
completed:nil];
+                    return;
+                }
             }
             UIImageView *imageView = (UIImageView *)strongSelf.view;
             if (imageView && imageView.image != image) {
@@ -404,9 +416,9 @@ WX_EXPORT_METHOD(@selector(save:))
                 [strongSelf fireEvent:@"load" params:@{ @"success": error? 
@false : @true,@"size":sizeDict}];
             }
             //check view/img size
-            if (!error && image && weakSelf.view) {
+            if (!error && image && strongSelf.view) {
                 double imageSize = image.size.width * image.scale * 
image.size.height * image.scale;
-                double viewSize = weakSelf.view.frame.size.height *  
weakSelf.view.frame.size.width;
+                double viewSize = strongSelf.view.frame.size.height *  
strongSelf.view.frame.size.width;
                 if (imageSize > viewSize) {
                     self.weexInstance.performance.imgWrongSizeNum++;
                 }
@@ -415,10 +427,14 @@ WX_EXPORT_METHOD(@selector(save:))
     } else {
         dispatch_async(WXImageUpdateQueue, ^{
              __strong typeof(weakSelf) strongSelf = weakSelf;
+            if (strongSelf == nil) {
+                return;
+            }
+            
             [strongSelf cancelImage];
 
             void(^downloadFailed)(NSString *, NSError *) = ^void(NSString 
*url, NSError *error) {
-                weakSelf.imageDownloadFinish = YES;
+                strongSelf.imageDownloadFinish = YES;
                 WXLogError(@"Error downloading image: %@, detail:%@", url, 
[error localizedDescription]);
             };
 

Reply via email to