【问题标题】:Get the results returned from an NSInvocationOperation获取从 NSInvocationOperation 返回的结果
【发布时间】:2012-10-07 19:44:34
【问题描述】:
- (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)结果 返回值 方法返回的对象或包含返回值的 NSValue 对象(如果它不是对象)。如果方法或调用未完成执行,则此方法返回 nil。

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

【问题讨论】:

    标签: ios nsinvocation nsinvocationoperation


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2022-07-11
      • 2021-11-14
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多