Получите результаты, возвращенные 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;
});