Правильно, если я отменил NSInvocationOperation
внутри операции? пример:NSInvocationOperation Отменить использование
.h файл:
//defined in the interface
NSInvocationOperation *op1;
NSOperationQueue *loadQueue;
.m файл:
-(id)init{
op1 = [NSInvocationOperation new];
loadQueue = [NSOperationQueue new];
}
-(void)downloadData{
op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadServerResponse:) object:newerRequest];
[loadQueue addOperation:op1];
}
Теперь у меня есть метод, чтобы загрузить данные с сервера. Я добавил условие, чтобы проверить, есть ли ошибка. Если это так, я отменяю эту операцию внутри метода и вызывая тот же метод при извлечении нового токена входа.
- (void)loadServerResponse{
if(server_error){
[op1 cancel];
//fetch login token again
[self downloadData];
return;
}
Я делаю что-то неправильно?
Если вы сказали правду, то как можно получить доступ к объекту NSInvocationOperation и отменить его (или любой другой метод)? – 2cupsOfTech
Хороший вопрос - в этом конкретном примере OP пыталась отменить метод, который пыталась выполнить. Это означает, что он пытался ссылаться на объект через границы потоков, что обычно считается плохим. Если вы хотите отменить отмену, вы должны вызывать его из исходного потока, который помещает в действие операцию, подкласс NSOperation или управлять им внутренне. –
это имеет смысл. Я делаю что-то подобное, но мой откат происходит извне (не от метода к исполнению), и я думаю, что это должно быть хорошо. Я обрабатываю isCancelled внутри метода для выполнения – 2cupsOfTech