2

ラベルを更新する NSTimer を使用してタイマーをコーディングしました。問題は、同じviewcontrollerにuitableviewがあり、それを下にスクロールすると、タイマーがその値を更新しないため、ユーザーが「チート」してタイマーを停止できることです。

これは、CGD を使用したシリアル キューで簡単に修正できると思いますが、その方法がわかりません。

前もって感謝します、

ファン

4

4 に答える 4

4

まず、メイン スレッド以外のスレッドでは UI の変更を実行できないことに注意してください。そうは言っても、メイン キューで を起動する必要がありNSTimerます。そうしないと、 を変更したときにプログラムがクラッシュしUILabelます。このリンクhttp://bynomial.com/blog/?p=67とこれhttp://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/をご覧くださいリファレンス/Reference.html

私の知る限り、 for でタイマーをスケジュールすると、NSRunLoopCommonModesイベントの更新が無視され、希望どおりにタイマー jsut が起動します。

 NSTimer *timer = [NSTimer timerWithTimeInterval:1.0
                                           target:self
                                         selector:@selector(timerDidTick:)
                                         userInfo:nil repeats:YES];
  [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

-(void) timerDidTick:(NSTimer*) theTimer{
    [[self myLabel] setText:@"Timer ticked!"];
}
于 2013-04-28T10:03:36.400 に答える