使用NSTimer时发送到实例的无法识别的选择器

问题描述 投票:1回答:1

当我启动我的代码时,我遇到了控制台错误

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [_ SwiftValue counter]:无法识别的选择器发送到实例

代码如下

class Status: UIViewController {
    @IBOutlet var health: UIProgressView!
    @IBOutlet var happiness: UIProgressView!
    @IBOutlet var energy: UIProgressView!
    @IBOutlet var hygiene: UIProgressView!
    @IBOutlet var pain: UIProgressView!
    @IBOutlet var hunger: UIProgressView!

    var total:Double = 1

    @objc func counter() {
       total -= 0.05
    }

    let timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(counter), userInfo: nil, repeats:true)

    override func viewDidLoad() {
        super.viewDidLoad()

        hunger.setProgress(Float(total), animated: true)
        happiness.setProgress(Float(total), animated: true)
        energy.setProgress(Float(total), animated: true)
        hygiene.setProgress(Float(total), animated: true)
        pain.setProgress(Float(total), animated: true)
        health.setProgress(Float(total), animated: true)
    }
}

另外这里是我收到Error Message的完整错误消息的图片

swift selector nstimer
1个回答
0
投票

当您使用这样的默认值时,self尚未完全初始化。使用隐式展开的可选项并将调用移动到viewDidLoad

var timer: Timer!

override func viewDidLoad() {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(counter), userInfo: nil, repeats:true)
}

这假设您在视图控制器完成从nib加载之前不需要timer,这应该是大部分时间。

© www.soinside.com 2019 - 2024. All rights reserved.