倒数计时器时发出SIGABRT信号错误?

时间:2016-02-25 06:14:38

标签: xcode swift sigabrt

我正在为我的应用程序开始倒数计时器,从15开始倒计时。 这是我的代码:

m => m.ContribType

然而,当我运行它时,一旦我到达带有计时器的部件,我看到标签闪烁15一秒钟然后它立即崩溃并出现SIGABRT错误。我该怎么办?

3 个答案:

答案 0 :(得分:1)

通常会将计时器添加到NSRunLoop。

let myTimer = NSTimer(timeInterval: 1.0, target: self, selector: "updateCounter", userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(myTimer, forMode: NSDefaultRunLoopMode)

检查API以了解其他循环模式以满足您的需求。

此外,您还在viewDidLoad()...

中声明了updateCounter函数

答案 1 :(得分:0)

亚历克斯在这里说。您在updateCounter内定义了viewDidLoad功能,这可能会导致问题。

另外,请务必记住在选择器名称中添加:(冒号)。

NSTimer(timeInterval: 1.0, target: self, selector: "updateCounter:", userInfo: nil, repeats: true)

并按照以下方式定义您的方法:

func updateCounter(timer: NSTimer) {
    // Do something.
}

答案 2 :(得分:0)

你的问题在于你将你的NSTimer调用的函数放在它所在的函数中。你在viewdidload中同时拥有NSTimer和函数(updateCounter)。为了防止SIGABRT崩溃,您必须从viewdidload中取出updateCounter函数。

以下是您的代码应该是什么,在viewdidload之外使用 updateCounter。

import UIKit

class ViewController2: UIViewController {

    var countd = 15

  @IBOutlet weak var Timer: UILabel!
//
//

func updateCounter() {

            Timer.text = String(countd)

            if (countd > 0){

                Timer.text = String(countd--)
                Timer.text = String(countd)

            }

    }
    override func viewDidLoad() {
    super.viewDidLoad()
       Timer.text = String(countd)
//      

        var time:NSTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)

}
}