0

-[NSInvocationOperation initWithTarget:selector:object:]只接受一个对象作为将要调用的方法的参数传递。我想使用两个参数;我怎样才能做到这一点?

这是我的代码:

- (void)loadImage:(NSURL *)imageURL
{
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                        initWithTarget:self
                                        selector:@selector(requestRemoteImage:)
                                        object:imageURL];
    [queue addOperation:operation];
}

- (void)requestRemoteImage:(NSURL *)imageURL
{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage *image = [[UIImage alloc] initWithData:imageData];

    [self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:image waitUntilDone:YES];
}
4

3 回答 3

1

您可以使用 NSInvocation 对象来初始化操作:

- (id)initWithInvocation:(NSInvocation *)inv

(NSInvocation 可以处理多个参数);或者您可以将所需的参数包装到 NSArray 或 NSDictionary,前提是它们是对象。

于 2012-08-28T17:26:41.750 回答
1

invocation在将操作添加到队列之前询问操作并对其进行修改。

 NSInvocation * invocation = [operation invocation];
 [invocation setArgument:&anotherObject atIndex:3];    
 // Indexes 0 and 1 are self and cmd, and you've already used index 2

或者,正如 Rob Napier 建议的那样,使用NSBlockOperation更加灵活和易于使用。

于 2012-08-28T17:39:01.593 回答
-1

你可以发送一个包含所有你想要的值的字典

于 2012-08-28T17:25:42.887 回答