【问题标题】:NSTimer timer resetNSTimer 定时器复位
【发布时间】:2025-12-15 07:05:03
【问题描述】:

我正在开发一个应用程序,它有一个计时器,可以倒计时到事件的特定日期和时间:

   destinationDate = [NSDate dateWithTimeIntervalSince1970:1403938831];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES];

我试图实现的命令类似于:当它达到 0 时,它开始新的倒计时,以迎接新的未来事件。

我对目标 C 很陌生,想知道我是如何做到这一点的。

谢谢!

【问题讨论】:

  • 您在寻找[计时器无效]; ?
  • 不是真的,我有一组未来事件的日期。倒计时计时器倒计时到最近的日期,但是一旦到达那个日期,我需要计时器倒计时到下一个日期(其他日期重复该过程)感谢您的帮助
  • 让我印象深刻的是,当您到达 destinationDate 时,您可以按照 pawan 的建议,只需 invalidate 现有计时器,将您的 destinationDate 变量调整为下一个事件(如果有),并且然后安排一个新计时器,就像您在上面安排的第一个计时器一样。我不清楚问题是什么。
  • 是的,这就是我所追求的。我的问题是如何实现这一点,我是一个全新的编码,我在实现计时器时遇到了问题

标签: objective-c cocoa-touch cocoa timer nstimer


【解决方案1】:

我将仅简要列出主要方面:
我假设你有一个 NSDates 的订购 NSArray 和一个 NSTimer 的属性。

@property (nonatomic, strong) NSArray *dates;
@property (nonatomic, strong) NSTimer *timer;

现在你需要一个方法,它返回尚未过去的第一个日期。

-(NSDate *)giveMeADate
{
    for(NSDate *date in self.dates){
        if([date laterDate:[NSDate date]] === date){
            return date;
        }
    }
    return nil;
}

还有一个设置定时器的方法:

-(void)setTimer
{
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES];
}

最后更新UILabel

-(void)updateLabel
{
    NSDate *futureDate = [self giveMeADate];
    NSdate *now = [NSDate date];

    NSTimeInterval secondsBetween = [futureDate timeIntervalSinceDate:now];

    self.label.text = [NSString stringWithFormat:@"%i seconds to go", (int)secondsBetween];
}

所以重点是:您的计时器不计入事件,您的计时器滴答作响,您的应用程序执行逻辑。

【讨论】: