我的班级中有这两个功能:
func setTimer () {
alertEndTimer = Timer.init(timeInterval: 10, target: self, selector: #selector(hideAlert), userInfo: nil, repeats: false);
print ("NOW: \(now)")
print ("FIRE DATE: \(alertEndTimer!.fireDate)");
}
@IBAction func hideAlert () {
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
控制台的结果是这样的:
NOW: 2017-03-01 03:32:36 +0000
FIRE DATE: 2017-03-01 03:32:46 +0000
Run Code Online (Sandbox Code Playgroud)
然后我在 上设置了一个断点doSomething();。但是等了 1 分钟后,根本没有调用断点。我还检查了 timer 是否isValid(),它返回true。那么为什么我的函数没有被调用?
从文档:
使用
init(timeInterval:invocation:repeats:)orinit(timeInterval:target:selector:userInfo:repeats:)类方法创建计时器对象,而不将其安排在运行循环上。(创建完成后,必须通过调用add(_:forMode:)对应RunLoop对象的方法,手动将定时器添加到run loop 。)
那是你需要打电话
RunLoop.current.add(alertEndTimer, forMode: .defaultRunLoopMode)
Run Code Online (Sandbox Code Playgroud)
以启动计时器。
您可以使用scheduledTimer方法创建计时器以自动启动它。
alertEndTimer = Timer.scheduledTimer(timeInterval: 10,
target: self,
selector: #selector(hideAlert),
userInfo: nil,
repeats: false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |