Установка более одного аргумента для NSInvocationOperation

-[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];
}

3 ответа

Решение

Вы можете отправить словарь со всеми значениями, которые вы хотите

Вы можете использовать объект NSInvocation для инициализации операции:

- (id)initWithInvocation:(NSInvocation *)inv

(NSInvocation может обрабатывать несколько аргументов); или вы можете обернуть необходимые аргументы в NSArray или NSDictionary, если они являются объектами.

Спросите операцию для его 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

Или, как предложил Роб Нейпир, используйте NSBlockOperation, который является гораздо более гибким и простым в использовании.

Другие вопросы по тегам