5

これは私の正確なコードであり、機能していないようです。私が間違っていることを教えてもらえますか?refreshTimerはプライベートインターフェイスですでに宣言されていることに注意してください。

-(void)viewDidLoad {
refreshTimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerTest)      userInfo:nil repeats:YES];

}
-(void)timerTest {
NSLog(@"Timer Worked");
}
4

2 に答える 2

16

試してみてくださいscheduledTimerWithTimeInterval

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myMethod) userInfo:nil repeats:YES];

引用:NSTimer timerWithTimeInterval:機能していません

scheduledTimerWithTimeInterval:invocation:repeats:およびscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:に自動的に追加されるタイマーを作成します。つまり、自分でタイマーをNSRunLoop追加する必要はありません。それらをに追加することNSRunLoopは、それらを発火させる原因です。

于 2012-08-17T00:18:24.377 に答える
7

2つのオプションがあります。

使用する場合timerWithTimeInterval

そのような以下を使用してください。

refreshTimer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerHandler) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSRunLoopCommonModes];

また、モードは2つのオプションです。NSDefaultRunLoopModevsNSRunLoopCommonModes

詳しくは。このドキュメントを参照してください:RunLoopManagement


使用する場合scheduledTimerWithTimeInterval

そのような以下を使用してください。

refreshTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerHandler) userInfo:nil repeats:YES];

スケジュールされたタイマーは、実行ループに自動的に追加されます。

詳しくは。このドキュメントを参照してください:タイマープログラミングトピック

要約すれば

" timerWithTimeInterval"は、追加する実行ループにタイマーを追加することを忘れないでください。

" scheduledTimerWithTimeInterval"のデフォルトの自動は、現在のループで実行されるタイマーを作成します。

于 2012-08-17T00:41:28.993 に答える