ios - 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)”,但我仍然无法正常工作。
解决方案
processTimer
未正确声明回调函数:
@objc func processTimer() {
//your code here
}
您需要在函数之前添加@objc关键字才能在Timer
回调中调用。另外,总的来说,我认为最好改用#selector
关键字。
推荐阅读
- raspberry-pi - 使用 Gstreamer 播放 RTSP 流时出现问题
- google-cloud-platform - 组和 IAM 角色
- aws-lambda - 在 Dynamodb Python 查询中捕获异常
- php - 找到 2 到 4 个单词,它们之间最多有 2 个逗号
- java - 如何更正我的代码以删除 CORS 获取问题?
- openshift - Openshift:如何增加 sti-build 的内存限制
- python - 如何将用户输入与excel数据框匹配
- python - 如何在 bcp 命令中指定长度前缀?
- python - Django - 使用表单发布到特定的 URL
- c++ - 字符串迭代器永远不会到达 std::string::end()