我试图绕过斯威夫特。目前我不明白这段代码应该如何工作:
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() {
...
}
}
答案 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
)
}