【发布时间】:2011-10-06 17:33:20
【问题描述】:
我正在使用NSTimer 更新每分钟显示当前时间的标签。我在整分钟的日期(例如 2:23:00 而不是 2:22:17)触发计时器。问题是NSTimer 似乎工作不准确,这意味着它有时会过早触发(这会导致(例如)下午 2:23,而实际上是下午 2:24)。
是否有任何修复/解决方法?
编辑:这是我启动计时器的方式:
NSTimer *clockTimer = [[NSTimer alloc] initWithFireDate:[NSDate nextFullMinuteDate]
interval:60.0
target:self
selector:@selector(updateClocks:)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:clockTimer
forMode:NSDefaultRunLoopMode];
[clockTimer release];
顺便说一句,我已经尝试将触发日期添加几毫秒,这似乎有帮助,但看起来找到一个合适的间隔来添加是偶然的。
编辑 2:好的,所以我手动将计时器设置为在一整分钟后触发 0.05 秒,然后在 60.0 秒后再次触发。现在这是我在被调用方法中登录的内容:
0.048728
0.047153
0.046484
0.044883
0.043103
如您所见,NSTimer 实际上并没有使用 60 秒的时间间隔,而是稍短一些。
【问题讨论】:
-
很难说不知道如何计算间隔并启动计时器
-
你是如何计算
nextFullMinuteDate的? -
@PeterHosey:看here
-
@PeterHosey:另外,请查看我在下面的答案中编写并发布的
MinuteTimer课程。这应该可以让您快速创建 SSCCE。