Я сделал RunLoop с таймером, который обновляет метку, отображающую обратный отсчет. Мне нужно, чтобы RunLoop останавливался, когда обратный отсчет достигает нуля, для случая, когда таймер заканчивается нормально, я мог бы просто использовать runUntilDate, где дата является текущей датой + время обратного отсчета. Проблема заключается в том, что пользователь отменяет обратный отсчет с помощью кнопки до его завершения. Я не знаю, как сказать RunLoop остановить действие кнопки отмены. Вот код для RunLoop:
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
[self methodSignatureForSelector:@selector(updateCountdownLabel:)]];
[invocation setTarget:self];
[invocation setSelector:@selector(updateCountdownLabel:)];
[[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes];
Метод просто сообщает метке уменьшить на 1 в каждом цикле.
Я мог бы сказать кнопке отмены изменить метку на ноль, а селектор цикла выполнения проверить, равно ли значение нулю, но может ли собственный селектор цикла выполнения сказать ему остановиться?
cancelPerformSelector:target:argument:
cancelPerformSelectorsWithTarget:
Это самые близкие, которые я нашел, но они, похоже, не работают внутри собственного селектора RunLoops, или, по крайней мере, я не пробовал их никоим образом.
В основном мне нужно, чтобы кнопка останавливала RunLoop или каким-то образом останавливала RunLoop из своего собственного селектора.
Спасибо.