2016-08-28 3 views
-2

J'ai une classe personnalisée "MyTask" qui est appelée à partir d'autres classes comme la classe "ViewController". A l'intérieur « MyTask » Je fonction « startTask » qui prend les paramètres requis pour démarrer NSTimer pour exécuter la fonction « doStuff » Cependant quand j'utilise la fonction startTask et réglez le sélecteur d'autres fonctions, il se bloqueErreur de sélecteur non reconnue dans SWIFT

class MyTask { 
      var timer = NSTimer() 
      var timerInterval = 0.0 
      var target: AnyObject! 
      var selector = Selector() 

      func startTask(time: Double, target target: AnyObject, selector: Selector) { 
       self.timerInterval = time 
       self.target = target 
       self.selector = selector 
       doStuff() 
      } 
func doStuff() { 
//....some code here to run 
//====Crash happens on this line===== 
self.timer = NSTimer.scheduledTimerWithTimeInterval(self.timerInterval, target: self, selector: self.selector, userInfo: nil, repeats: true) 

} 

Dans mon autre classe voici ce que je fais

class ViewController { 
    let mynewClass = MyTask() 
    mynewClass = startTask(2, target: self, selector_: #selector(updateLabel)) 

func updateLabel() { print("") } 
} 

Je reçois une erreur *** NSForwarding: avertissement: objet 0x7fe90242f6f0 de la classe 'abc' ne met pas en œuvre methodSignatureForSelector: - [. abc timerAction] - problèmes à venir sélecteur Unrecognized

Qu'est-ce que je fais mal?

+1

Vous devriez nommer toutes vos classes commençant par une lettre majuscule –

+0

En plus de ce que dit @LeoDabus, vous ne devriez pas ajouter "_" à vos noms de paramètres. Au lieu de cela, utilisez le nom de paramètre normal. Ensuite, dans l'implémentation de l'initialiseur ou de la méthode, utilisez 'self.' pour définir des propriétés avec le même nom qu'un paramètre, comme ceci:' self.target = target' –

+0

Leo, abc n'est qu'un exemple. –

Répondre

1

La classe qui doit être la cible du sélecteur doit être dérivée de NSObject. Vous utilisez une fonctionnalité Objective-C ici; vous devez avoir une classe compatible Objective-C.