NSTimer "target" : 如何引用类的方法?



我正试着把我的头缠在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"中放入什么?

以下是GameViewControlleraddNext()方法:

 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
    )
}

最新更新