Установка более одного аргумента для 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
, который является гораздо более гибким и простым в использовании.