からタイマーを呼び出していviewDidLoad
ます。タイマーがセレクターを初めて呼び出すとき、期待される結果は問題ありません。しかし、徐々に呼び出しが行われると、関数は何らかの形でセレクターによって複数回呼び出されます。NSLog
出力数が増加していることを示すログを記録しました。以下のコードがあります。状況が明確になることを願っています。
-(void)viewDidLoad
{
remainingTicks = 10;
[self updateLabel];
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(handleTimerTick)
userInfo:nil
repeats:YES];
}
-(void)handleTimerTick
{
remainingTicks--;
[self updateLabel];
if (remainingTicks <= 0) {
[myTimer invalidate];
myTimer = nil;
UIButton *but = [[UIButton alloc] init];
if (answerAt == 0) {
[buttonA setBackgroundColor:[UIColor greenColor]];
}
else if (answerAt == 1) {
[buttonB setBackgroundColor:[UIColor greenColor]];
}
else if (answerAt == 2) {
[buttonC setBackgroundColor:[UIColor greenColor]];
}
else {
[buttonD setBackgroundColor:[UIColor greenColor]];
}
[self performSelector:@selector(next:) withObject:but afterDelay:1.5 ];
}
}
-(void)updateLabel
{
timerLabel.text = [[NSNumber numberWithUnsignedInt: remainingTicks] stringValue];
}