2016-05-01 11 views
0

私はSwiftの周りに頭を包み込みたい。現在、私は、コードのこの作品がどのように動作するかを理解していない:NSTimer "target":クラスのメソッドを参照するには?

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()方法です:あなたはtargetためGameViewController()を渡すと

class GameViewController: GAITrackedViewController, AVAudioPlayerDelegate { 
    ... 
     func addNext() { 
     ... 
     } 
} 
+0

uはウルは次のメソッドを追加表示することができ –

+0

'の新しい作成されたインスタンスGameViewController'はストーリーボードで設計されたものではありません。それ以外は、デフォルトイニシャライザを使用して*実際の作業* UIViewControllerインスタンスを作成することはできません。 – vadian

+0

Swift 2.2では、セレクタとして文字列を使用しません。この種のエラーを防ぐ新しい構文があります。 – Sulthan

答えて

1

、スウィフトはGameViewControllerの一時的なインスタンスを作成し、addNext呼び出しのターゲットとしてNSTimerに与えます。これは確かにではなく、あなたが望むものです:一時的なインスタンスではなく、ビューコントローラのインスタンス上でコールを行う必要があります。

あなたがviewDidLoadから、GameViewController、と言うの方法からタイマー登録を行った場合、その後、あなたはtargetパラメータにselfを渡すことができます。

override func viewDidLoad() { 
    super.viewDidLoad() 
    backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(
     3 
    , target: self 
    , selector: #selector(GameViewController.addNext) 
    , userInfo: nil 
    , repeats: true 
    ) 
} 
関連する問題