2017-11-24 7 views
-2

Ich habe Probleme beim Verknüpfen mehrerer Schaltflächen mit einem einzelnen Klickereignis mit Swift. Ich habe die Ausgänge zu den Schaltflächen erstellt, das Ziel buttonPressed-Ereignis zu jeder der Schaltflächen hinzugefügt, aber es gibt immer noch einen Fehler, der besagt, dass "unerkannter Selektor an Instanz gesendet" wurde. Ich habe mir viele andere Beispiele und Themen von Menschen mit ähnlichen Problemen angeschaut, aber ich sehe keinen Unterschied darin, was ich tue. Welche Bereiche könnten das beeinflussen? Warum ist es nicht so einfach, wie alle sagen?Swift 4 - Unbekannter Selektor an Instanz gesendet

Hier ist mein Code:

override func viewDidLoad() { 
    super.viewDidLoad() 
    addBackground() 

    btnShoulder.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 
    btnBack.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 
    btnTricep.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 
    btnBicep.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 
    btnChest.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 
    btnLegs.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 
} 

func buttonPressed(_ sender: UIButton) 
{ 
    self.performSegue(withIdentifier: "ChooseExercise", sender: sender) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
    if(segue.identifier == "ChooseExercise") 
    { 
     let senderMirror = sender.customMirror 
     if senderMirror.subjectType == UIButton.self 
     { 
      let buttonID = senderMirror.descendant("tag") as! Int 
      let category = Exercise.Category(rawValue: buttonID) 
      jeremyExerciseController.currentExerciseCategory = category 
     } 
    } 
    else 
    { 
     preconditionFailure("Unexpected segue identifier") 
    } 
} 

Ich erhalte die folgende Fehlermeldung:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swift4Gains.jeremyExerciseController ShoulderExercise:]: unrecognized selector sent to instance 0x7fb323f426f0' 

Der Fehler tritt auf, wenn ich auf eine der Schaltflächen klicken. Ich kann im Stack-Trace keine Zeilennummer sehen, die angibt, auf welcher Linie er gerade auftritt, aber ich gehe davon aus, dass er versucht, die buttonPressed-Methode aufzurufen und zu scheitern. Ich bin sehr neu zu schnell und immer noch nicht den Drehbuch des Debuggers und was nicht.

UPDATE

Dank Michael Hulet war ich in der Lage Ausnahme zu bekommen Breakpoints arbeiten und einige weitere nützliche Daten. Der Haltepunkt wird zu Beginn der AppDelegate geworfen, aber in meinem Breakpoint Navigator Ich habe zwei Ausnahmen:

objc_exception_throw in libobjc.A.dylib 
__cxa_throw in libc++abi.dylib 

Es ist nicht mir Probleme in meinem eigentlichen Code zu geben, so muss es als etwas weiter sein.

Eine Anleitung wäre erstaunlich, ich habe mich schon eine Weile darum gekümmert. Vielen Dank!

+2

Wenn Sie eine Frage zu einem Fehler stellen, müssen Sie zwei Dinge tun. 1) Fügen Sie die vollständige und genaue Fehlermeldung in Ihre Frage ein, nicht nur einen Teil davon. 2) Zeigen Sie die genaue Codezeile an, die den Fehler verursacht. Bitte aktualisieren Sie Ihre Frage (keine Kommentare) mit diesen zusätzlichen Informationen. – rmaddy

+0

Ich habe meine Frage aktualisiert, um detaillierter zu sein –

+1

Keiner der Code, den Sie in Ihrer Frage geschrieben haben, hat irgendetwas mit diesem Fehler zu tun. – rmaddy

Antwort

-1

Hier ist, was für mich gearbeitet:

Ich glaube, dass die tatsächliche UIButton an den Wähler irrelevant ist, außer Sicht ist es zu sein. Sie fügen der Schaltfläche ein Ziel hinzu, sodass es als solches behandelt wird. Deshalb wäre es für mich Sinn machen, wenn Sie die folgenden

func buttonPressed(_ sender: UIButton) 
{ ... } 

Um

geändert
func buttonPressed(_ sender: UIGestureRecognizer) 
{ ... } 

Wenn der Benutzer auf die Schaltfläche tippt, wird der Wähler läuft. Die einzigen gemeinsamen Daten zwischen dem Selektor und der Funktion sind die Art der Aktion, die für dieselbe Aktion spezifisch ist. Zum Beispiel, wenn man den Namen der Schaltfläche, nachdem die Wähler aufgerufen wird, dann könnte man die folgenden Schritte aus drucken wollte:

Button.addTarget(self, action: #selector(self.buttonPressed(_:)), for: .touchUpInside) 

func buttonPressed(_ sender:UIGestureRecognizer) { 
    print(sender.view?.identifier) 
} 

hoffe, das hilft!

+0

Das hat nichts mit dem zu tun Problem. Bitte lesen Sie den Fehler in der Frage. Keiner der in der Frage geposteten Code ist relevant. Ganz zu schweigen davon, dass diese Antwort falsch ist. Es gibt keinen 'UIGestureRecognizer'. – rmaddy

Verwandte Themen