Получите результаты, возвращенные NSInvocationOperation

- (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 для изображения. Что не так с приведенным выше кодом?

1 ответ

Решение

Операции на NSOperationQueue выполнены в отдельном потоке. Операция не завершена, когда вы звоните [downloadImageOperation result]следовательно, результат nil,

Например, вы можете назначить вид изображения в конце вашего downloadImageSync: метод, но это должно быть сделано в основном потоке:

dispatch_async(dispatch_get_main_queue(), ^{
    imageVIEW.image = imag;
});
Другие вопросы по тегам