2

NSTimerボタンクリックで開始を停止するのに問題があります。[timer invalidate]そしてtimer = nil;、私がそれを止めようとしているときviewWillDisappearも、このタイマーによって呼び出されているメソッドによって呼び出されたメソッドでも、何もしません。ただし、タイマーを開始してviewWillAppear無効にすると、viewWillDisappearすべて問題ありません。

タイマーを開始しているスレッドに問題がある可能性があると思います。あなたはそれを手伝ってもらえますか?

NSTimer私はここで止まらないことに関するすべての答えを調べましたが、それらは問題を解決するのに役立ちませんでした。

タイマーを初期化する方法:

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(oneSecondPassedSinceRoundStarted) userInfo:nil repeats:YES];  

私がそれを止めようとした方法:

[self.timer invalidate];
[timer invalidate];
4

2 に答える 2

8

あなたが助けを求めた後、あなたがあなた自身の質問にどれほど速く答えることができるかはおかしいです。自分で答えを見つけるのにどれだけ苦労していても、次のようになります。

[self performSelectorOnMainThread:@selector(stopTimer) withObject:nil waitUntilDone:YES];

そしてセレクター:

- (void) stopTimer
{
    [timer invalidate];
    timer = nil;
}
于 2012-07-22T09:18:05.377 に答える
6

私はこれを作成してテストしました:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(oneSecondPassedSinceRoundStarted:) userInfo:nil repeats:YES];
}

-(void)oneSecondPassedSinceRoundStarted:(NSTimer *)time {
    // Do what You want

    NSLog(@"CALLING!");
}

-(IBAction)buttonAction:(id)sender {

    NSLog(@"Stop timer!");

    [myTimer invalidate];
    myTimer = nil;
}

そして、それはうまく機能しています。

注:oneSecondPassedSinceRoundStartedの後にコロンを追加するのを忘れています。

于 2012-07-22T08:57:14.350 に答える