我有一点问题,我正在从这样的网址加载图片:
+ (void)getImageFromURL:(NSString *)imageFilename urlMode:(NSString *)mode block:(id (^)(UIImage *responseImage))aImage {
NSURL *url = [NSURL URLWithString:[mainURL stringByAppendingString:mode]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
AFImageRequestOperation *requestOperation = [AFImageRequestOperation imageRequestOperationWithRequest:request
imageProcessingBlock:nil
cacheName:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
{
aImage(image);
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
{
// manage errors
}];
[[[NSOperationQueue alloc]init] addOperation:requestOperation];
}
我正在尝试将iVar UIImage * userAvatar设置为来自此请求的响应,但问题是,因为它是异步请求我在代码移动之前没有得到iVar设置,所以我的iVar是空的当我访问它并将其传递给另一种方法时。
答案 0 :(得分:2)
这就是异步编程的本质!您将不得不重新设计userAvatar
上的依赖项,以考虑它的可用性是不确定的。
因此,不是让你的操作的成功块只是设置userAvatar
ivar,它会照顾一旦图像可用后需要发生的任何事情。例如,如果要设置UIImageView
的图像,则在成功块中
dispatch_async(dispatch_get_main_queue(), ^{
myImageView.image = image;
});
(如果不了解您的目标细节和实施细节,这只是“例如......”)
答案 1 :(得分:1)
您忘了在最后添加[requestOperation start];
。