gpt4 book ai didi

ios - NSTimer 的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 02:14:12 25 4
gpt4 key购买 nike

Firstly, this is what I wan't to achieve:

我想从当前日期和时间用户选择的日期和时间运行一个计时器

What I have done:

  • 制作DatePickerIBOutlet
  • 制作了一个UIButton

What I have tried:

- (IBAction)schedulePostTapped:(id)sender
{

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCountdown:) userInfo:nil repeats:YES];
}

- (void)updateCountdown:(NSTimer *)timer
{
NSDate *startingDate = [chooseDate date];


NSDate *endingDate = [NSDate date];

double secondsTime = [endingDate timeIntervalSinceDate:startingDate];


NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];

NSInteger hours = [dateComponents hour];
NSInteger minutes = [dateComponents minute];
NSInteger seconds = [dateComponents second];
NSString *countdownText = [NSString stringWithFormat:@"%ld Hours %ld Minutes %ld Seconds",(long)hours, (long)minutes, (long)seconds];
self.statusLabel.text = countdownText;

NSLog(@"%@",[NSString stringWithFormat:@"%f",secondsTime]);

if (secondsTime==0) {
[timer invalidate];
timer = nil;
}

}

The issue I'm having:

  • 每次我选择一个时间,即使是在当前时间之后一分钟,计时器也会随机添加一些额外的秒数。我无法弄清楚。

Example

** 延迟必须为 1 分 04 秒,但显示为 1 分 55 秒**

最佳答案

不要每秒都有定时器文件,启动定时器后不要询问结束时间。

请务必从用户处获取结束时间,然后使用 initWithFireDate: 启动带有 future 日期的计时器。您必须使用 addTimer:forMode: 将新计时器添加到运行循环中。触发后,计时器将消息 aSelector 发送到目标。

保存他们触摸按钮的时间。通过将所选持续时间与保存的时间相加来计算点火时间。

对于添加方法调用的文档,参数无关紧要,点击initWithFireDate并阅读“Quick Help Inspector”中的文档

enter image description here

关于ios - NSTimer 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28942326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com