从块返回的UIImage从块返回的UIImage(returning UIImage from bl

2019-05-12 14:47发布

我有以下代码:

- (UIImage *) getPublisherLogo
{
    //check the cache if the logo already exists
    NSString * imageUrl = [NSString stringWithFormat:@"%@/%@&image_type=icon", self.baseUrl, self.imageUrl_];


        ASIHTTPRequest * imageRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:imageUrl]];
        [imageRequest setTimeOutSeconds:30.0];
        [imageRequest setDownloadCache:[ASIDownloadCache sharedCache]];
        [imageRequest setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
        [imageRequest setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy]; 
        [imageRequest setCompletionBlock:^(void){


            UIImage *img = [UIImage imageWithData:[imageRequest responseData] ];
            if (img){
                return img;
            }
        }];

        [imageRequest setFailedBlock:^(void){
            NSLog(@"Error in pulling image for publisher %@", [[imageRequest error] userInfo]);
        }];

        [imageRequest startAsynchronous];
    }
}

问题是,返回值/在一个块返回的UIImage。 如何避免这种情况?

Answer 1:

你不能因为它返回到从完成块返回任何void

你可能需要创建像一个新的方法setLogo:(UIImage *)image该公司预计,该图像进行设置,并调用该方法从完成块内的对象。



Answer 2:

您可以将您的IMG指针外块,并宣布它__block并使用它作为一个封闭。 但是,你真的需要问自己有什么打算与IMG做,记住调用异步的轴承。 我猜想你应该在块的其他的调用其他方法并通过填充的图像作为参数英寸



Answer 3:

对于从ASIHttpRequest响应得到一个对象,我用的通知。

例如,在调用的viewController

- (void)viewDidLoad {
    // Subscribe notifications
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onGetPhoto:) name:@"getPhotoNotification" object:nil];
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Unsubscribe from notifications
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"getPhotoNotification" object:nil];
}

- (void)onGetPhoto:(NSNotification *)notification {
    ...
}

在您完成块

 [[NSNotificationCenter defaultCenter] postNotificationName:@"getPhotoNotification" object:self userInfo:userInfo];

随着用户信息您的照片。



文章来源: returning UIImage from block