0

我在用

[NSTimer scheduledTimerWithTimeInterval: _callbackPeriod
                                 target: self
                               selector: @selector(timerCallback:)
                               userInfo: nil
                                repeats: NO];

时间间隔。这个间隔可能会有所不同,但我在 1 秒时对其进行测试。在每个间隔(1 秒)结束时,会更新一个简单的 UI 文本框,然后再次安排计时器。更新通过调用

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
NSNotification *notification = [NSNotification notificationWithName:named 
                                                             object:info];
[notificationCenter postNotification:notification];

通知代码执行

NSString* timerString = [NSString stringWithFormat:@"%i", info.timerCount];
[_timerValue setStringValue:timerString];

在哪里

@property (weak) IBOutlet NSTextField *timerValue;

此方法将显示一个运行计数器,该计数器在间隔结束时递增。

我遇到的问题是数据的显示速度很慢。随着它的进展,我应该看到间隔的平滑显示,但它却是波涛汹涌的。NSLogs 显示确实数据是平滑的,但显示不是。因此,我看到的不是 1,2,3,4 5 等,而是 1,3,4,6,... 知道我做错了什么吗?在 setStringValue 周围我需要一些糖吗?

谢谢。

4

1 回答 1

0

这是倒数计时器的示例,应该可以帮助您。

- (void)startCountdown {
    countdownSeconds = 60; 
    startTime = [NSDate date];

    countdown = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self
    selector:@selector(countdownUpdateMethod:) userInfo:nil repeats:YES];

    // invalidate the timer if the view unloads before the end
    // also release the NSDate if it does not reach the end
}

- (void)countdownUpdateMethod:(NSTimer*)theTimer {

    NSDate *currentDate = [NSDate date];
    NSTimeInterval elaspedTime = [currentDate timeIntervalSinceDate:startTime];

    NSTimeInterval difference = countdownSeconds - elaspedTime;
    if (difference <= 0) {
        [theTimer invalidate];  // kill the timer
        difference = 0;
    }

    // Update the label with the remaining seconds
    NSString *countdownString = [NSString stringWithFormat:@"%f",difference];

    countdownLabel.text = [countdownString substringToIndex:2];
   // NSLog(@"%f",difference);
}
于 2013-05-08T23:55:45.147 回答