1
- (void)viewDidLoad
{        
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];        
    NSInvocationOperation *downloadImageOperation = [[NSInvocationOperation alloc] initWithTarget:[ImageDownloader getInstance]
                                                                            selector:@selector(downloadImageSync:)
                                                                              object:@"image url"];
    [operationQueue addOperation:downloadImageOperation];        
    UIImage *imag = [downloadImageOperation result]; // image is always nil here
    imageVIEW.image = imag;
}

返回调用或方法的结果。- (id)result 返回值 方法返回的对象,如果不是对象,则返回包含返回值的 NSValue 对象。如果方法或调用未完成执行,则此方法返回 nil。

我总是得到nil图像。上面的代码有什么问题?

4

1 回答 1

1

对 a 的操作在NSOperationQueue单独的线程上执行。调用时操作尚未执行完毕[downloadImageOperation result],因此结果为nil.

例如,您可以在downloadImageSync:方法结束时分配图像视图,但必须在主线程上完成:

dispatch_async(dispatch_get_main_queue(), ^{
    imageVIEW.image = imag;
});
于 2012-10-08T06:19:31.447 回答