4

重複の可能性:
NSTimer timerWithTimeInterval: 動作していません

私のアプリでは、NSTimer でアクションを実行するための次の設定があります。

mで。ファイル:

@implementation MYViewController {
      NSTimer *aTimer;
}

ユーザーが関連するボタンをクリックすると、次のようになります。

- (IBAction)userClick:(id)sender {
     aTimer = [NSTimer timerWithTimeInterval:1.0 
                                      target:self 
                                    selector:@selector(doSomethingWithTimer:) 
                                    userInfo:nil 
                                     repeats:YES]; 
     //[aTimer fire]; //NSTimer was fired just once.
}

そして私も持っています:

-(void)doSomethingWithTimer:(NSTimer*)timer {
     NSLog(@"something to be done");
}

毎秒、領事に「何かをしなければならない」というセリフがあると思います。タイマーは一度も呼び出されません。[aTimer fire] を使用して NSTimer を起動しようとしましたが、一度だけ起動し、期待どおりに繰り返されません。

誰でもこれにアプローチする方法を教えてもらえますか?

4

3 に答える 3

9

使用する

- (NSTimer *)scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

ループを手動で実行するために追加する必要はありません。

于 2013-01-07T12:32:41.227 に答える
4

タイマーを実行ループに追加する必要があります。

[[NSRunLoop mainRunLoop] addTimer:aTimer forMode:NSDefaultRunLoopMode];
于 2013-01-07T12:29:47.653 に答える
1

ここでの問題はスコープです。変数はフィールドである必要があるため、メソッドを終了するとGCされませaTimerん。userClick

NSTimer *timer;

...

- (IBAction)userClick:(id)sender {
    if (timer != nil && [timer isValid]) {
        [timer invalidate];
        timer = nil;
    }
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                             target:self 
                                           selector:@selector(doSomethingWithTimer:) 
                                           userInfo:nil 
                                            repeats:YES]; 
}
于 2013-01-07T12:29:42.490 に答える