私はタイマーをviewDidLoad
から呼び出しています。タイマがセレクタを初めて呼び出すとき、期待される結果は良好です。しかし、呼び出しが行われると、関数は何らかの理由でセレクタによって何度も呼び出されます。出力の数が増えていることを示すNSLog
を記録しました。私は以下のコードを持っています。状況が明らかになることを願っています。NSTimerがセレクタ関数を何回も呼び出さないようにするにはどうしたらいいですか?
-(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];
}
ログ出力を投稿できますか? 'UIButton * but = [[UIButton alloc] init];' 1)ボタンがビューに追加されていません。2)確かにメモリがリークしていますか? – trojanfoe
ARCを使用している場合は、漏れていません。 –