Swift 4:Timer Crashing – 无法识别的选择器发送到实例
我正在尝试调用Timer的一个实例,并为每一秒钟打印“已经过了一秒钟”。 我正在关注Udemy的完整iOs 11和Swift开发者课程。 教练正是这样做,他的代码正常工作,但是我的崩溃了。
这是代码:
var timer: Timer! = Timer() @IBAction func cameraPressed(_ sender: Any) { timer.invalidate() } func processTimer() { print("A second has passed") } override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: Selector("processTimer"), userInfo: nil, repeats: true)
它应该在运行应用程序时启动计时器,然后在我按下cameraPressed按钮时停止它。 但是,它出错了:
无法识别的选择器发送到实例…
和
libc ++ abi.dylib:以NSException类型的未捕获exception终止
我是Swift的新手,其他类似的StackOverflow问题并没有解决我的问题。 我试过改变了“计时器!” 可选“定时器?” 并将“Selector(”processTimer“)”更改为“#selector(processTimer)”,我仍然没有让它工作。
尝试这个。
var timer: Timer! = Timer() @IBAction func cameraPressed(_ sender: Any) { timer.invalidate() } @objc func processTimer() { print("A second has passed") } override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(processTimer), userInfo: nil, repeats: true) }
在Swift 4+中,你需要为选择器方法提供@objc表达式 。 在此之前它曾经是隐含的obj-C。 也许教师video正在运行旧版Swift。
回调函数processTimer
未正确声明:
@objc func processTimer() { //your code here }
您需要在函数之前添加@objc关键字才能在Timer
回调中调用。 另外,一般来说我认为最好使用#selector
关键字。