iOS:让NSTimer从现在开始5秒钟

时间:2015-10-15 19:17:35

标签: ios nstimer nstimeinterval

情景我正在开发一个应用程序,需要在点击按钮后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?

2 个答案:

答案 0 :(得分:3)

您的整个NSDate计算错误且不必要。 NSTimer需要几秒钟。如果你想从现在开始5秒钟,只需通过5

答案 1 :(得分:2)

问题实际上是在我调用[controlTimer fire];的代码中。这是遗留下来的,因为我试图让它工作,我错误地把它留在了那里。哎呀,浪费了半个小时。所以对于那些可能遇到同样问题的人来说,你只需要设置

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

并且您不需要明确调用fire,因为scheduled的{​​{1}}部分会根据您设置的时间间隔为您启动选择器。