为什么这个 Swift 计时器没有触发?
Why is this Swift Timer not firing?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var Time: UILabel!
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
@objc func updateTime() {
let currentDateTime = Date()
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
let dateTimeString = formatter.string(from: currentDateTime)
Time.text = dateTimeString
}
我试图让这个计时器触发以更新时间标签,但它似乎没有触发并保持文本静态。
这是我不断收到的错误:
'unrecognized selector sent to instance 0x600000faed90'
问题是您的代码应该在一个方法中。当你初始化定时器 属性 时没有 self
。你有两个选择。
将您的计时器声明为 lazy var
通常将您的计时器声明移动到任何视图控制器方法 viewDidLoad
。
请注意,我还会更改您的计时器间隔频率。每秒 100 次太多了。如果您只需要在分钟更改时触发您的方法,您可以安排计时器在下一个偶数分钟开始并每分钟重复一次。
这个问题是一个棘手的问题,涉及self
的含义。变化
override func viewDidLoad() {
super.viewDidLoad()
}
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
到
override func viewDidLoad() {
super.viewDidLoad()
self.everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
}
var everyMinuteTimer : Timer!
我知道这看起来不可思议,但这会解决问题。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var Time: UILabel!
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
@objc func updateTime() {
let currentDateTime = Date()
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
let dateTimeString = formatter.string(from: currentDateTime)
Time.text = dateTimeString
}
我试图让这个计时器触发以更新时间标签,但它似乎没有触发并保持文本静态。
这是我不断收到的错误:
'unrecognized selector sent to instance 0x600000faed90'
问题是您的代码应该在一个方法中。当你初始化定时器 属性 时没有 self
。你有两个选择。
将您的计时器声明为
lazy var
通常将您的计时器声明移动到任何视图控制器方法
viewDidLoad
。
请注意,我还会更改您的计时器间隔频率。每秒 100 次太多了。如果您只需要在分钟更改时触发您的方法,您可以安排计时器在下一个偶数分钟开始并每分钟重复一次。
这个问题是一个棘手的问题,涉及self
的含义。变化
override func viewDidLoad() {
super.viewDidLoad()
}
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
到
override func viewDidLoad() {
super.viewDidLoad()
self.everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateTime), userInfo: nil, repeats: true)
}
var everyMinuteTimer : Timer!
我知道这看起来不可思议,但这会解决问题。