在 Swift 中使用 NSTimer 时发送到类的无法识别的选择器; NSInvalidArgumentException
Posted
技术标签:
【中文标题】在 Swift 中使用 NSTimer 时发送到类的无法识别的选择器; NSInvalidArgumentException【英文标题】:Unrecognized selector sent to class when using NSTimer in Swift; NSInvalidArgumentException 【发布时间】:2016-01-26 23:52:52 【问题描述】:我正在尝试使用 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() 不接受任何参数,因此将其作为选择器调用而不带冒号后缀应该可以工作。这似乎是这个问题所独有的。
【问题讨论】:
已编辑以解释此问题的独特性。 【参考方案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
希望对您有所帮助!
【讨论】:
以上是关于在 Swift 中使用 NSTimer 时发送到类的无法识别的选择器; NSInvalidArgumentException的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在 nstimer 倒计时结束时转换到新的视图控制器 [重复]