используя NSOperationQueue и блоки - PullRequest
2 голосов
/ 25 февраля 2012

У меня небольшие проблемы с использованием addoperationwithblock в Какао. Допустим, у меня есть мастер-функция

-(IBAction) callthisone {

  // Call another function "slave" here and store returned value in result

    result = return value from slave
    NSLog(@" result is %@",result);
 }];

}

-(NSArray *) slave {

 [operationQueue addOperationWithBlock: ^{   

  NSString * result = @"5" ;
  }];

 return result;
}

Я никогда не смогу получить значение результата, возвращенное мастером. Как мне это сделать ? Мой подход правильный? Спасибо

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Вы можете попробовать что-то вроде этого:

-(IBAction) callthisone {
    [self slave: ^(NSString* result) {
            NSLog(@" result is %@",result);
        }
    ];
}


-(void)slave: (void(^)(NSString*)) callback {
    [operationQueue addOperationWithBlock: ^{
            NSString* str = [NSString stringWithFormat: @"5]";
            callback(str);
        }
    ];
}
0 голосов
/ 25 февраля 2012

Документация Apple для addOperationWithBlock гласит:

Параметры

Блок для выполнения из объекта операции. Блок должен занять без параметров и без возвращаемого значения.

Они предназначены для автономных блочных операций.

Не могли бы вы попробовать что-то другое, более гибкое в плане ввода и вывода вещей из очереди / потока? Возможно Grand Central Dispatch (я просто смотрю на эту тему ).

...