Хорошо, этот код довольно простой. Пользователь вводит ответ в текстовое поле, если оно равно «первый + второй», они получают точку. Затем у них есть 5 секунд, чтобы ответить на следующую математическую задачу. Если они это сделают, функция doCalculation запускается снова, и они получают другую точку. Если они этого не делают, то запускается функция «onTimer», и дерьмо попадает в вентилятор.
Проблема в том, что, когда пользователь исправляет несколько проблем подряд, «doCalculation» запускается несколько раз, а затем у меня сразу несколько таймеров. Это действительно начинает портить игру.
Мне нужно остановить таймеры. Очевидно, использовать «Invalidate», но я не знаю, где. Я не могу сделать таймер недействительным до того, как он запустится, так что ... 1005 *
Еще один вариант, который я не знаю, как это сделать: что если всякий раз, когда вы решаете проблему, она просто устанавливает таймер на 5 секунд вместо создания нового. Но как я могу узнать, был ли таймер уже создан? Я не уверен, каков наилучший ход действий или синтаксис. Мысли?
Большое спасибо!
- (IBAction)doCalculation:(id)sender
{
NSInteger numAnswer = [answer.text intValue];
if ( numAnswer == first + second) {
numAnswered++;
NSString *numberAnsweredCorrectly = [[NSString alloc] initWithFormat:@"%d", numAnswered];
numCorrectlyAnswered.text = numberAnsweredCorrectly;
answer.text = @"";
NSTimer *mathTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
//Set the variables to two HUGE numbers, so they can't keep plugging in the same answer
first = arc4random() % 10;
second = arc4random() % 10;
NSString *firstString = [[NSString alloc] initWithFormat:@"%d", first];
NSString *secondString = [[NSString alloc] initWithFormat:@"%d", second];
firstNumber.text = firstString;
secondNumber.text = secondString;
}