ios - 获取从 NSInvocationOperation 返回的结果

标签 ios nsinvocation 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) 结果 返回值 方法返回的对象或包含返回值的 NSValue 对象(如果它不是对象)。如果方法或调用未完成执行,则此方法返回 nil。

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

最佳答案

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

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

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

关于ios - 获取从 NSInvocationOperation 返回的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772246/

相关文章:

php - 图片上传到 SSL 文件夹,状态代码 200,标题 {connection = closed}

javascript - 如何使用 javascript css 或 html attr 禁用 iOS 链接预览

objective-c - NSInvocation 获取返回值 : called inside forwardInvocation: makes the returned object call dealloc:

objective-c - 使 NSInvocation 调用特定的 IMP

swift - “NSInvocationOperation”在 Xcode 6.1 中不可用

ios - 在不离开 iOS Keychain 的情况下检查 pin

ios - 如何为具有动态高度的表格单元格正确设置自动布局?

objective-c - NSInspiration setArgument 问题

ios - observeValueForKeyPath 没有被调用

ios - NSOperationQueue 取消特定操作