この質問は、スタック オーバーフローで死ぬほど聞かれました。たくさんの回答を見てきましたが、どういうわけかまだ問題があります。
とにかく、私は NSTimer を割り当てるので、私のビューではロードされました:
NSTimer *oneSecondTicker = [[NSTimer alloc] init];
oneSecondTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabelsWithOneSecondTicker) userInfo:nil repeats:YES];
self.dateForTimeLabel = [NSDate date];
セレクターであるメソッドは次のとおりです。
-(void) updateLabelsWithOneSecondTicker {
if(self.dateForTimeLabel != nil)
{
self.lblTime.text = [NSString stringWithFormat:@"%f", fabs([self.dateForTimeLabel timeIntervalSinceNow])];
}
}
このメソッドは、基本的に毎秒ラベルを更新し、タイマー/ストップウォッチのようなものを提供します。
開始/一時停止ボタンもあり、押すと一時停止します。
[oneSecondTicker invalidate];
oneSecondTicker = nil;
ボタンを押して再度開始する場合の方法は次のとおりです。
NSTimer *oneSecondTicker = [[NSTimer alloc] init];
oneSecondTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabelsWithOneSecondTicker) userInfo:nil repeats:YES];
self.dateForTimeLabel = [NSDate date];
タイマーに保持を呼び出しません。プロパティがなく、合成されません。ただし、インターフェイスで宣言されています。
問題を解決するには、一時停止/開始ボタンを押すたびに、タイマーが無効にならず、時間ラベルがどんどん更新されるようになるため、何らかの理由で複数のタイマーが存在すると思われます。(明らかに、実際のタイマーの機能はこれらのメソッドにはまだありません。これは、私の NSTimer を機能させるための単なるテストです)。
どうすればいいの?