我想把头包裹在Swift上。目前,我不明白这段代码应该如何工作:
backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(3, target: GameViewController(), selector: "addNext", userInfo: nil, repeats: true)
该语句使游戏崩溃
MyApp.GameViewController addNext]: unrecognized selector sent to instance 0x7b1cd0b0'
基本上,我在GameViewController类中有一个方法,希望通过计时器从所有场景中调用。如何引用gameViewController.addNext()?基本上我应该在
"target"
中输入什么?这是
GameViewController
和addNext()
方法: class GameViewController: GAITrackedViewController, AVAudioPlayerDelegate {
...
func addNext() {
...
}
}
最佳答案
当您为GameViewController()
传递target
时,Swift将创建一个GameViewController
的临时实例,并将其提供给NSTimer
作为addNext
调用的目标。这当然不是您想要的:您需要在视图控制器的实例上进行调用,而不是在某些临时实例上进行调用。
如果从GameViewController
方法(例如,从viewDidLoad
)进行计时器注册,则可以为self
参数传递target
:
override func viewDidLoad() {
super.viewDidLoad()
backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(
3
, target: self
, selector: #selector(GameViewController.addNext)
, userInfo: nil
, repeats: true
)
}
关于ios - NSTimer“目标”:如何引用一个类的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36966281/