我正在尝试使用NSTimer以一定的间隔运行一个函数,但每次运行时程序都会崩溃并出现异常:
+[Project.Class updateLabel]: unrecognized selector sent to class...
Terminating app due to uncaught exception "NSInvalidArgumentException".
代码如下:
class SecondViewController: UIViewController {
// MARK: Properties
override func viewDidLoad() {
super.viewDidLoad()
do {
try updateLabel()
try startTimer()
}
catch{
self.showAlert()
}
}
@IBOutlet weak var i2cLabel: UILabel!
// MARK: Actions
func startTimer() throws {
_ = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateLabel"), userInfo: nil, repeats: true)
}
func showAlert() {
}
func updateLabel() throws {
}
}
如果我注释掉NSTimer行,程序编译并运行就好了。
请注意,选择器函数updateLabel()不接受任何参数,因此将其作为不带冒号后缀的选择器调用应该有效。这似乎是这个问题的独特之处。
答案 0 :(得分:1)
尝试将您的代码更新为:
override func viewDidLoad() {
super.viewDidLoad()
do {
updateLabel()
try startTimer()
}
catch{
self.showAlert()
}
}
// MARK: Actions
func startTimer() throws {
_ = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateLabel"), userInfo: nil, repeats: true)
}
func showAlert() {
}
func updateLabel() {
}
似乎:NSTimer
不知道调用函数throws
。所以它会崩溃。
我试图找到一些官方或一些文章描述它。但我现在找不到可悲的。
您可以参考此问题:Reference
希望这有帮助!