重复 Swift 定时器给出 SIGABRT 错误

Repeating Swift timer gives SIGABRT error

我正在尝试制作一个重复计时器,它将在 Swift 中每秒在后台关闭一次,但是一旦我 运行 代码,它就会返回 SIGABRT。

var CAPS = 0

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

@objc func CAPSTimer() {
    let closedAdds = Int(closedAddsCounter.text!)!
    var CAPSAddOne = closedAdds + CAPS
    closedAddsCounter.text = "\(CAPSAddOne)"
}

我试过更改代码,但唯一有效的代码没有重复。

试试这行

var CAPS = 0
var CAPSAddOne = 0
var closedAdds = 0
override func viewDidLoad()
{
   let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(CAPSTimer), userInfo: nil, repeats: true)
   closedAdds = Int(closedAddsCounter.text!)!
   CAPSAddOne = closedAdds
}

@objc func CAPSTimer() {
    CAPSAddOne += CAPS
    closedAddsCounter.text = "\(CAPSAddOne)"
}

“Signal SIGABRT”的一个非常常见的原因是您的网点中的拼写错误或错误。 我看到您的代码中有一些未包装的值用于获取 closedAdsCount。

尝试检查您的 closedAddsCounter IBOutlet 是否也没有丢失 link

没有理由读取标签中的值。

只需使用一个 属性 并创建对计时器的强引用。

并且始终建议将 target/action 方法中的代码分派到主线程

var counter = 0

var timer : Timer!

override func viewDidLoad()
{
   timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(CAPSTimer), userInfo: nil, repeats: true)
   closedAddsCounter.text = "\(counter)"
}

@objc func CAPSTimer() {
    counter += 1 
    DispatchQueue.main.async {
        self.closedAddsCounter.text = "\(self.counter)"
    }
}

或者使用基于(更现代的)块API(删除操作方法)

override func viewDidLoad()
{
   timer = Timer.scheduledTimer(timeInterval: 1.0, repeats: true) { _ in    
       DispatchQueue.main.async {
          self.counter += 1 
          self.closedAddsCounter.text = "\(self.counter)"
       }
   }
   closedAddsCounter.text = "\(counter)"
}

如果代码仍然崩溃,则插座未连接。