2016-04-20 9 views
1

Die App hat einen Bildschirm, in dem ich nach Eingabe der Eingaben, OK tippen und es sollte Eingabe Validierung durchführen, wenn in Ordnung, dann navigieren und Daten zurück zum vorherigen Bildschirm über Protokoll/Delegaten, andernfalls , blockieren Sie die Navigation und zeigen Sie eine Warnmeldung an.NSInvalidArgumentException mit Knopf Antippen

Das ist mein viewDidLoad:

override func viewDidLoad() { 
    super.viewDidLoad() 

    button.addTarget(self, action: "pushView:", forControlEvents: .TouchUpInside) 
} 

Dies ist die pushview() Funktion:

func pushView() { 
    //some codes to validate data and perform navigation 
} 

Wenn ich die app in Simulator laufen, stürzt es, wenn ich die Taste tippen und das ist die Fehlermeldung:

2016-04-21 00:12:39.976 ToDo List[1795:1253192] - 
[ToDo_List.AddReminderController pushView:]: 
unrecognized selector sent to instance 0x7fa13ac16c40 
2016-04-21 00:12:39.981 ToDo List[1795:1253192] 
*** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '- 
[ToDo_List.AddReminderController pushView:]: 
unrecognized selector sent to instance 0x7fa13ac16c40' 

Es kann ein Problem mit Absender oder Selektor geben, aber ich weiß nicht, was es genau bedeutet.

Antwort

0

Wenn Sie einen : auf Ihre Wähler/Aktionsnamen wie Sie fügen haben hier:

button.addTarget(self, action: "pushView:", forControlEvents: .TouchUpInside)

Es bedeutet, dass Ihre Wähler einen Parameter erwartet.

Ihre pushView() Funktion hingegen enthält keine Parameter, also beziehen Sie sich auf iOS/UIKit auf zwei verschiedene Dinge.

Die Lösung ist:

button.addTarget(self, action: "pushView", forControlEvents: .TouchUpInside)

  • oder einen Parameter zu Ihrer pushView() Funktion wie so hinzufügen:

    • entweder die : von Ihrem action wie so entfernen

    func pushView(sender: AnyObject)

+0

Vielen Dank für Ihre Erklärung! Ich bin Swift sehr neu. –

+0

Gern geschehen. Selektoren haben eine seltsame Syntax, bis Sie sie verstehen. Diese Antwort spricht ein bisschen mehr über Selektoren und ihre Syntax: http://StackOverflow.com/a/6404439/4063602. Und wie @ oleg-gordiichuk in seiner Antwort erwähnt, wurde die Syntax in Swift 2.2 geändert, so dass Sie stattdessen '# selector' schreiben können und Code-Hilfe haben, um Ihnen bei der Auswahl der richtigen Methode zu helfen. Das liegt wahrscheinlich daran, dass so viele Probleme mit der "alten" Selektorsyntax hatten, wie Sie es gerade hatten (und wie ich es auch getan habe). – pbodsk

0

Fix Selektor:

button.addTarget(self, action: "pushView", forControlEvents: .TouchUpInside) 

Für Zukunft nicht vergessen, dass neueste swift 2.2 Syntax einige Unterschiede in dieser hat.

button.addTarget(self, action: #selector(MyClass.pushView), forControlEvents: .TouchUpInside) 
Verwandte Themen