Из документации , «Этот метод удаляет запросы на выполнение только в текущем цикле выполнения, а не во всех циклах выполнения». Это означает, что вы должны вызывать cancelPreviousPerformRequestsWithTarget в основном потоке. Используйте executeSelectorOnMainThread: withObject: waitUntilDone: из вашего потока, чтобы запланировать вызов метода cancelPreviousPerformRequestsWithTarget в основном потоке.
Это обходной путь, но он должен работать.
Изменить, чтобы показать пример:
Самый простой способ - использовать вспомогательный метод:
-(void)cancelTimeout
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
Затем в фоновом потоке вызовите это, если вы хотите отменить тайм-аут:
[self performSelectorOnMainThread:@selector(cancelTimeout) withObject:nil waitUntilDone:NO];