#objective-c
#objective-c
Вопрос:
Я использую NSTimer для запуска цикла обратного отсчета, а затем в какой-то момент (нажав «пуск») Мне нужно запустить это еще раз. Однако первый таймер не останавливается, поэтому скорость обратного отсчета увеличивается с каждым запуском функции
- (IBAction)startbutton:(id)sender {
timeTick = arc4random_uniform(7) 3;
timeofstart = CACurrentMediaTime();
chosentime = timeTick;
NSLog(@"chosentime værdien er %f", chosentime);
[timer invalidate];
timer = nil;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
}
- (void) tick {
if (timeTick == 0) {
winnerlabel2.text = @"GO !!!";
}
else {
timeTick --;
NSLog(@"%f", timeTick);
}
}
Ответ №1:
Здесь неясно, что timer
имеется в виду в этих первых 2 строках. Эта 3-я строка создает новую локальную переменную. Похоже, у вас должна быть переменная экземпляра timer
, которая создается где-то в другом месте. Вы аннулируете этот таймер, но затем создаете new timer
как локальную переменную, у которой нет постоянного дескриптора (потому что он умирает после выхода из области видимости в конце этого вызова метода), и, таким образом, каждый таймер после первого никогда не становится недействительным.
[timer invalidate];
timer = nil;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
Измените эту 3-ю строку из…
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
Для…
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];