我正试着把我的头缠在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() {
...
}
}
当为target
传递GameViewController()
时,Swift会创建一个GameViewController
的临时实例,并将其作为addNext
调用的目标提供给NSTimer
。这当然不是你想要的:你需要在视图控制器的实例上进行调用,而不是在某个临时实例上。
如果您使用GameViewController
的方法进行定时器注册,例如使用viewDidLoad
,则可以为target
参数传递self
:
override func viewDidLoad() {
super.viewDidLoad()
backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(
3
, target: self
, selector: #selector(GameViewController.addNext)
, userInfo: nil
, repeats: true
)
}