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

时间:2016-05-01 11:45:04

标签: ios swift nstimer

我试图绕过斯威夫特。目前我不明白这段代码应该如何工作:

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() {
        ...
      }
 }

1 个答案:

答案 0 :(得分:1)

当您为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
    )
}