我想把头包裹在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() {
        ...
      }
 }

最佳答案

当您为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/

10-13 05:00