AFImageRequestOperation等到完成

时间:2012-03-14 18:13:57

标签: objective-c asynchronous afnetworking

我有一点问题,我正在从这样的网址加载图片:

+ (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是空的当我访问它并将其传递给另一种方法时。

2 个答案:

答案 0 :(得分:2)

这就是异步编程的本质!您将不得不重新设计userAvatar上的依赖项,以考虑它的可用性是不确定的。

因此,不是让你的操作的成功块只是设置userAvatar ivar,它会照顾一旦图像可用后需要发生的任何事情。例如,如果要设置UIImageView的图像,则在成功块中

dispatch_async(dispatch_get_main_queue(), ^{
    myImageView.image = image;
});

(如果不了解您的目标细节和实施细节,这只是“例如......”)

答案 1 :(得分:1)

您忘了在最后添加[requestOperation start];