Невозможно заставить работать NSTimer - PullRequest
0 голосов
/ 30 ноября 2011

Использование NSTimer для моего приложения, в котором я должен показать таймер обратного отсчета с начальным временем, равным 100 сек. Он показывает 99, затем 98..96..94..92 ... 86 и так далее. Но я хочу, чтобы каждая секунда появлялась. Вот мой код ....

   -(void)updateTimerLabel{
   if (timeRemaining>0 ) {



    timeRemaining=timeRemaining-1.0;
    timerLabel.text=[NSString stringWithFormat:@"%.0f", timeRemaining];


    countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimerLabel) userInfo:nil repeats:YES];
    }
}

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Попробуйте следующий код

int i =100;

-(void)viewDidLoad
{
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(theActionMethod) userInfo:nil repeats:YES];  

}

-(void)theActionMethod
{
   if(i > 0)
   {
      NSString *str = [NSString stringWithFormat:@"%d",i];
      lbl.text = str;
   }
   i--;
}
1 голос
/ 30 ноября 2011

Вы фактически заново создаете таймер каждый раз, когда вызывается ваш метод.

Вы должны попытаться оставить это снаружи и сохранить его, пока не закончите с ним.

@interface SomeClass

NSTimer * aTimer;

@end

@implementation

- (void)createTimer {
    aTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimerLabel) userInfo:nil repeats:YES] retain];
}

- (void)updateTimerLabel {
    // do timer updates here

    // call [aTimer release]
    // and [aTimer invalidate]
    // aTimer = nil;
    // when you're done
}

@end
0 голосов
/ 30 ноября 2011

у вас есть вызов updateTimerLabel вне метода.например: - (void) viewDidLoad {timeRemaining = 100.0; [self updateTimerLabel]; countdownTimer = [NSTimer scheduleTimerWithTimeInterval: 1.0 target: self selector: @selector (updateTimerLabel) userInfo: nil повторов: YES];}

100(void) updateTimerLabel {if (timeRemaining> 0) {timeRemaining = timeRemaining-1.0; NSLog (@ "% @", [NSString stringWithFormat: @ "%. 0f", timeRemaining]);}}
...