计时器设置在iOS中不起作用

时间:2018-06-15 17:08:41

标签: ios swift timer

我的计时器设置有问题。

我为它写的代码是:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: Selector(("updateTimer")), userInfo: nil, repeats: true)
    }

    func updateTimer(){
        label.text = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: DateFormatter.Style.short, timeStyle: DateFormatter.Style.short)
    }
}

我运行应用程序,而不是计时器,我得到一个Thread类型的错误。 类似的东西:

  

"线程1:发信号SIGBART"

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

如果将Selector(("updateTimer"))替换为#selector(updateTimer)

将会更好。

然后,系统会告诉您需要将@objc添加到updateTimer功能中。

不相关但不使用NSDate

这是您的固定代码:

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
    }

    @objc func updateTimer() {
        label.text = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)
    }
}

答案 1 :(得分:0)

将您的代码更改为:

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
}

@objc func updateTimer(){
    label.text = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: DateFormatter.Style.short, timeStyle: DateFormatter.Style.short)
}
}