使用 NSTimer 时发送到实例的无法识别的选择器
Posted
技术标签:
【中文标题】使用 NSTimer 时发送到实例的无法识别的选择器【英文标题】:unrecognized selector sent to instance when using NSTimer 【发布时间】:2018-09-02 14:10:34 【问题描述】:当我启动我的代码时,我遇到了控制台错误
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[_SwiftValue 计数器]:无法识别的选择器已发送到实例
代码如下
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
【问题讨论】:
【参考方案1】:当您使用这样的默认值时,self
尚未完全初始化。使用隐式展开的可选项并将调用移至viewDidLoad
:
var timer: Timer!
override func viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(counter), userInfo: nil, repeats:true)
这假设您在视图控制器完成从 nib 加载之前不需要timer
,这应该是大部分时间。
【讨论】:
以上是关于使用 NSTimer 时发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 NSTimer 时发送到类的无法识别的选择器; NSInvalidArgumentException
[__NSCFTimer copyWithZone:]:无法识别的选择器发送到实例
NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器