cancelPreviousPerformRequest из вопроса о фоновом потоке - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть следующий код, который выполняется при нажатии кнопки:

 [self performSelector:@selector(timeout:) withObject:nil afterDelay:30.0];

Проблема возникает, когда я хотел отменить это из фонового потока:

[NSObject cancelPreviousPerformRequestsWithTarget:self];

Я сделал это, и он не отменил, он все еще вызывает тайм-аут после 30 секунд.Итак, мой вопрос, есть ли способ отменить это из фоновой темы?

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Из документации , «Этот метод удаляет запросы на выполнение только в текущем цикле выполнения, а не во всех циклах выполнения». Это означает, что вы должны вызывать cancelPreviousPerformRequestsWithTarget в основном потоке. Используйте executeSelectorOnMainThread: withObject: waitUntilDone: из вашего потока, чтобы запланировать вызов метода cancelPreviousPerformRequestsWithTarget в основном потоке.

Это обходной путь, но он должен работать.

Изменить, чтобы показать пример:

Самый простой способ - использовать вспомогательный метод:

-(void)cancelTimeout
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

Затем в фоновом потоке вызовите это, если вы хотите отменить тайм-аут:

[self performSelectorOnMainThread:@selector(cancelTimeout) withObject:nil waitUntilDone:NO];
0 голосов
/ 28 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...