首页 > 解决方案 > Swift 4:计时器崩溃 - 无法识别的选择器发送到实例

问题描述

我正在尝试调用 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 类型的未捕获异常终止

我是 Swift 的新手,其他看起来与此类似的 StackOverflow 问题并没有解决我的问题。我试过改变“定时器!” 可选择“定时器?” 并将“Selector(“processTimer”)”更改为“#selector(processTimer)”,但我仍然无法正常工作。

标签: iosswifttimerunrecognized-selector

解决方案


processTimer未正确声明回调函数:

@objc func processTimer() {
   //your code here
}

您需要在函数之前添加@objc关键字才能在Timer回调中调用。另外,总的来说,我认为最好改用#selector关键字。


推荐阅读