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

に対する操作NSOperationQueueは別のスレッドで実行されます。を呼び出したときに操作の実行が終了していない[downloadImageOperation result]ため、結果はnilです。

たとえば、メソッドの最後にイメージ ビューを割り当てることができますがdownloadImageSync:、メイン スレッドで行う必要があります。

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