我正在为我的应用程序开始倒数计时器,从15开始倒计时。 这是我的代码:
m => m.ContribType
然而,当我运行它时,一旦我到达带有计时器的部件,我看到标签闪烁15一秒钟然后它立即崩溃并出现SIGABRT错误。我该怎么办?
答案 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)
}
}