swift - 使用 NSTimer 时发送到实例的无法识别的选择器
问题描述
当我启动我的代码时,我遇到了控制台错误
由于未捕获的异常“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)
}
}
另外这里是我收到 错误消息的完整错误消息的图片
解决方案
当您使用这样的默认值时,self
尚未完全初始化。使用隐式展开的可选项并将调用移至viewDidLoad
:
var timer: Timer!
override func viewDidLoad() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(counter), userInfo: nil, repeats:true)
}
这假设您在视图控制器完成从 nib 加载之前不需要timer
,这应该是大部分时间。
推荐阅读
- javascript - 如果 Key 存在于也包含数组的 JavaScript 对象中,则查找并返回值
- javascript - 如何通过javascript在洗牌后恢复元素的顺序?
- facebook - Facebook - API 转换和像素 - 重复问题
- javascript - 打字稿继承 - 将类型为父类的变量设置为子类
- javascript - 使用 React Router 时如何错误捕获“无法读取未定义的属性‘链接’”?
- python - 当使用 Autokey 按下某个键时,如何停止 while 循环?
- python - 是否可以在 Python 中向基于 Selenium 的应用程序添加用户界面?
- postgresql - psql:致命:用户“” aws rds Postgresql 的 PAM 身份验证失败
- c# - View 返回 null 给控制器,接受 ViewModel
- c# - TPL 数据流,如果 BoundedCapacity 已满,如何丢弃以前的(第一条)消息