0

viewWillAppearメソッドが呼び出されたときにタイマーを開始したい。

完全に機能していますが、既にタイマーが設定されているこの現在のビューに新しいビューをプッシュすると問題が発生します。その新しいビューをポップしてリコールviewWillAppearすると、以前と同じようにタイマーを再度開始したいと思います。私はほとんどのテクニックを持っていますが、解決策を見つけることができません。

-(void)viewWillAppear:(BOOL)animated
 {
       [super viewWillAppear:animated];
       [NSThread detachNewThreadSelector:@selector(createTimer) toTarget:self withObject:self];
 }


 - (void)createTimer 
{       
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSRunLoop* runLoop = [NSRunLoop currentRunLoop];

  gameTimer = [[NSTimer timerWithTimeInterval:1.00 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES] retain];
  [[NSRunLoop currentRunLoop] addTimer:gameTimer forMode:NSDefaultRunLoopMode];
  timeCount = 360; 
  [runLoop run];
  [pool release];

}

- (void)timerFired:(NSTimer *)timer 
{
   if(timeCount == 0)
   {
      [self timerExpired];
   } else {
      timeCount--;
       if(timeCount == 0) {
           [timer invalidate];
           [self timerExpired];
       }
    }
    timeLabel.text = [NSString stringWithFormat:@"%02d:%02d",timeCount/60, timeCount % 60];
}


- (void) timerExpired 
{
    //NSLog(@"Final == %@",arrayAnswers);
    //NSLog(@"Attempt == %d",[arrayAnswers count]);

    [gameTimer invalidate];
    gameTimer = nil;
}
4

1 に答える 1

0

まあ、経験に基づいて、あなたの問題はタイマーのスレッドです。基本的に、問題はここにあります:

[NSThread detachNewThreadSelector:@selector(createTimer) toTarget:self withObject:self];

絶対にわかりませんが、あなたのコードは本当に間違っていないと思います。私はまだそれを理解していませんが、NSTimerオブジェクトがdetachNewThreadSelector:使用されているときにアクティブ化されていないと思います。メインスレッドでタイマーを実行してみてください。

[self performSelectorOnMainThread:@selector(createTimer) withObject:nil waitUntilDone:NO]

私はこれを行い、私が望む結果を得ました。

于 2012-07-08T17:28:03.290 に答える