2016-05-01 9 views
0

Ich versuche, meinen Kopf um Swift zu wickeln. Zur Zeit verstehe ich nicht, wie das Stück Code funktionieren soll:NSTimer "target": Wie wird auf eine Methode einer Klasse verwiesen?

backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(3, target: GameViewController(), selector: "addNext", userInfo: nil, repeats: true) 

Diese Aussage stürzt das Spiel mit

MyApp.GameViewController addNext]: unrecognized selector sent to instance 0x7b1cd0b0' 

Im Prinzip habe ich eine Methode in GameViewController Klasse, die ich von allen nennen möchte Szenen mit einem Timer. Wie kann ich gameViewController.addNext() referenzieren? Grundsätzlich was soll ich in "target" eingeben?

Hier ist die GameViewController und addNext() Methode:

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

kann u zeigen ur nächste Methode hinzufügen –

+0

Die neu erstellte Instanz von ' GameViewController ist sicherlich nicht das, was im Storyboard entworfen wurde. Abgesehen davon können Sie keine * real arbeitende * UIViewController-Instanz mit dem Standardinitialisierer erstellen. – vadian

+0

In Swift 2.2 verwenden Sie keine Zeichenfolgen als Selektoren. Es gibt eine neue Syntax, die diese Art von Fehlern verhindert. – Sulthan

Antwort

1

Wenn Sie GameViewController() für die target passieren, schafft Swift eine temporäre Instanz GameViewController, und gibt es NSTimer als Ziel für den addNext Anruf. Dies ist ganz sicher nicht was Sie wollen: Sie müssen einen Aufruf auf der Instanz Ihres View-Controllers, nicht auf einer temporären Instanz vorgenommen werden.

Wenn Sie Timer Registrierung von einem Verfahren zur GameViewController, sagen wir, von viewDidLoad machen, dann können Sie self für den target Parameter übergeben:

override func viewDidLoad() { 
    super.viewDidLoad() 
    backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(
     3 
    , target: self 
    , selector: #selector(GameViewController.addNext) 
    , userInfo: nil 
    , repeats: true 
    ) 
} 
Verwandte Themen