iOS:让 NSTimer 从现在开始 5 秒后触发

iOS: Get NSTimer to fire 5 seconds from now

场景 我正在开发一个需要在点击按钮 5 秒后触发方法的应用程序。

代码 这是应该在 5 秒后触发 controlTimerExpire 方法的代码

NSDate *fiveSecondsFromNow = [[NSDate date] dateByAddingTimeInterval:5.0f];
    NSTimeInterval timeInterval = [fiveSecondsFromNow timeIntervalSinceNow];

controlTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(controlTimerExpire) userInfo:nil repeats:NO];

// I ALSO TRIED THIS; HARDCODING IT LIKE BELOW

controlTimer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(controlTimerExpire) userInfo:nil repeats:NO];

问题 controlTimerExpire 在点击按钮后立即触发。在点击按钮和触发 controlTimerExpire 方法之间需要间隔 5 秒。

问题为什么这个会立即触发而不是在 5 秒后触发?

LINKS 我上面所做的正是下面这些链接所说的,但是,它不会产生与链接中相同的结果。为什么?

Set an NSTimer to fire once in the future

How to call a method every x seconds in Objective-C using NSTimer?

你的整个 NSDate 计算都是错误的,没有必要。 NSTimer 需要几秒钟。如果你想从现在开始 5 秒后开火,只需传递 5.

实际上,问题出在我调用的代码 [controlTimer fire]; 中。那是遗留的,因为我试图让它工作,但我错误地将它留在了那里。哎呀,浪费了半个小时。因此,对于可能遇到相同问题的你们,您只需要设置

[NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(controlTimerExpire) userInfo:nil repeats:NO];

而且您不需要显式调用 fire,因为 scheduledTimerWithTimeIntervalscheduled 部分会根据您设置的时间间隔为您触发选择器。