NSTimer时间增量

时间:2012-10-25 09:44:37

标签: objective-c ios nstimer

我是iOS平台obj-C的初学者,我正在尝试构建一些简单的项目来构建我的基础。

我有一个按钮可以增加标签的NSTimer时间,但是当我使用NSLog记录时间时,它会在实现时间增量之前使用该值。我需要能够记录更新的时间(在增量之后),因为我需要该值并在解决此部分后在IBAction中实现更多功能。

例如15分钟我按下,NSLog将其读作“00:15:00.0”而不是“00:35:00.0”。

- (IBAction)onSkipPressed:(id)sender {
    startDate = [startDate dateByAddingTimeInterval:-1200];
    NSLog(@"%@",self.timeLabel.text);
}

有谁知道这个问题的原因?如果我在15分钟调用此IBAction,我应该如何解决它,以便NSLog将其读作“00:35:00.0”。

编辑 - 开始按钮将启动计时器,timeLabel将获取字符串。很抱歉错过了这么重要的细节。我认为项目中还没有任何与此功能相关的其他代码。谢谢你指出我。

- (void)updateTimer
{
    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss.S"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    timeLabel.text = timeString;   
}

我的IBAction解雇计时器

- (IBAction)onStartPressed:(id)sender {
    startDate = [NSDate date];

    gameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                                 target:self
                                               selector:@selector(updateTimer)
                                               userInfo:nil
                                                repeats:YES];

    //hide start button and show timeLabel
    startButton.hidden=true;
    timeLabel.hidden=false;

}

2 个答案:

答案 0 :(得分:1)

我回去做一些涉及NSTimer的教程的修订版。事实证明我失踪的是1行[self updateTimer]

- (IBAction)onSkipPressed:(id)sender {
    startDate = [startDate dateByAddingTimeInterval:-1200];
    [self updateTimer];
    NSLog(@"%@",self.timeLabel.text);
}

这解决了我的问题,并且更新了timeLabel.text以便我记录信息。

答案 1 :(得分:0)

嗯,你为什么要通过负1200?

// this subtracts 1200 seconds from your date, no?
startDate = [startDate dateByAddingTimeInterval:-1200];

你不应该这样做:

// add 30 minutes (60 seconds a minute x 30 minutes) to your time interval
startDate = [startDate dateByAddingTimeInterval:(60 * 30)];
...
NSLog(@"%@",self.timeLabel.text);

或者我误解了什么?