重复 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)"
}
如果代码仍然崩溃,则插座未连接。
我正在尝试制作一个重复计时器,它将在 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)"
}
如果代码仍然崩溃,则插座未连接。