"unrecognized selector geschickt Instanz" Fehler in Objective-C
Erstellte ich einen Knopf und fügte hinzu, eine Aktion, für die es, aber sobald es aufgerufen wird, bekam ich diese Fehlermeldung:
-[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance
0x3d03ac0 2010-03-16 22:23:58.811
Money[8056:207] *** Terminating app
due to uncaught exception
'NSInvalidArgumentException', reason:'*** -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0'
Dies ist mein code:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom];
numberButton.frame = CGRectMake(10, 435, 46, 38);
[numberButton setImage:[UIImage imageNamed:@"one.png"] forState:UIControlStateNormal];
[numberButton addTarget:self action:@selector(numberButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview: numberButton];
}
return self;
}
-(IBAction)numberButtonClick:(id)sender{
NSLog(@"---");
}
InformationsquelleAutor der Frage HelloWorld | 2010-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie Sie nicht sind Speicher verwalten der view-controller richtig und es freigegeben wird, ist an einem gewissen Punkt - die Ursachen der
numberButtonClicked:
Methode zum senden an ein weiteres Objekt, das ist jetzt besetzen den Speicher, der den view-controller war bisher besetzen...Stellen Sie sicher, dass Sie richtig behalten/Freigabe Ihres view-Controllers.
InformationsquelleAutor der Antwort Jasarien
Für diejenigen, die immer hier über Google, wie ich es Tat, die wahrscheinlich bezieht sich mehr auf Xcode 4.2+/iOS 5+ mehr, was mit ARC. Ich hatte den gleichen Fehler "unrecognized selector geschickt Instanz". In meinem Fall hatte ich einen UIButton target-Aktion einrichten, um den pass selbst als den parameter sender, aber später realisiert, dass ich brauchte es nicht und entfernt Sie, dass im code. Also, so etwas wie:
Wurde geändert zu:
Rechten Maustaste auf das UIButton in Frage, die zeigte, dass die Touch-Up-Inside-event wurde im Zusammenhang mit der view-Controller buttonPressed: Methode. Entfernen Sie diese und Neuzuweisung es um die modifizierte Methode funktionierte.
InformationsquelleAutor der Antwort LeonardChallis
War dies die top-Google-Antwort für dieses Problem, aber ich hatte eine andere Ursache/Folge - ich dachte, ich würde hinzufügen meine zwei Cent in Fall andere stolpern über dieses problem.
Ich hatte ein ähnliches Problem, nur an diesem morgen. Ich fand, dass, wenn Sie mit der rechten klicken Sie auf das UI-Element geben Sie die Ausgabe können Sie sehen, welche verbindungen erstellt wurden. In meinem Fall hatte ich eine Schaltfläche WLAN bis zu zwei Aktionen. Ich löschte die Aktionen aus dem Rechtsklick-Menü und rewired Sie und mein problem war behoben.
So stellen Sie sicher, Aktionen verdrahtet Recht.
InformationsquelleAutor der Antwort Chris K
OK, ich habe den chip in hier. Die OP dynamisch erstellt wird, die Taste. Ich hatte ein ähnliches Problem und die Antwort (nach Stunden der Jagd) ist so einfach, es machte mich krank.
Wenn Sie verwenden:
Wenn Sie einen Doppelpunkt am Ende der Zeichenfolge - es wird übergeben Sie den Absender. Wenn Sie nicht platzieren Sie den Doppelpunkt am Ende der Zeichenfolge wird es nicht, und die Empfänger erhalten eine Fehlermeldung, wenn es eine erwartet. Es ist leicht zu übersehen, der Doppelpunkt, wenn Sie die dynamische Erstellung von event-Namen.
Dem Empfänger-code-Optionen wie folgt Aussehen:
Wie üblich, immer ist es die offensichtliche Antwort, die wird vermisst.
InformationsquelleAutor der Antwort Craig H.
In meinem Fall die Funktion wurde nicht erwartet, dass ein argument, aber die Schaltfläche wurde so konfiguriert, dass Sie eine den Fehler verursacht. Um dies zu beheben musste ich die rewire-event-handler.
Hier ist meine Funktion:
Bemerken, es enthält keine Argumente.
Hier ist ein Bild von meinem button-Konfiguration (rechter Mausklick auf die Taste, um es anzuzeigen):
Feststellen, es gibt 3 event-Handler.
Um dies zu beheben musste ich entfernen Sie die einzelnen event-Elemente, die seit einer von Ihnen war der Versand einer Referenz auf sich selbst an die enterPressed Funktion. Entfernen diese Artikel, die ich klickte auf das kleine x-Symbol neben dem Namen der einzelnen Elemente, bis keine Elemente angezeigt.
Als Nächstes musste ich wieder die Taste, um die event. Dazu die Control-Taste gedrückt und ziehen Sie dann eine Linie von der Taste, um die Aktion. Es sollte sagen "Verbinden-Aktion". Hinweis: ich musste neu starten XCode für diese Arbeit aus irgendeinem Grund, sonst wird es nur lassen Sie mich einfügen-Aktionen (aka eine neue Aktion erstellen) oberhalb oder unterhalb der Funktion.
Sollten Sie nun ein einzelnes Ereignis-handler-Kabel an das button-event vergeht, ohne Argumente:
Diese Antwort ergänzt die Antwort von @Leonard Challis, die Sie Lesen sollten, wie gut.
InformationsquelleAutor der Antwort 1.21 gigawatts
Kann dies auch passieren, wenn Sie nicht die "Klasse" der view im interface builder.
InformationsquelleAutor der Antwort user1658373
In meinem Fall, ich war mit NSNotificationCenter und war der Versuch, mit einem Selektor, der nahm keine Argumente, aber war das hinzufügen von einem Doppelpunkt. Entfernen der Doppelpunkt das problem behoben.
Wenn über einen Selektor-Namen, nicht mit einem nachgestellten Doppelpunkt, wenn es keine Argumente. Wenn es ein argument ist, verwenden Sie einen nachgestellten Doppelpunkt. Wenn es mehr als ein argument, müssen Sie die Namen zusammen mit einem nachgestellten Doppelpunkt für jedes argument.
Siehe Adam Rosenfield ' s Antwort hier: Selektoren in Objective C
InformationsquelleAutor der Antwort Nathan Garabedian
Ich hatte dieses problem mit einem schnellen Projekt, wo ich bin erstellen der buttons dynamisch. Problem code:
War die Lösung, um einen vollständigen Doppelpunkt": "nach der Aktion: z.B.
Vollständiges Beispiel hier: https://developer.apple.com/library/content/samplecode/UICatalog/Listings/Swift_UIKitCatalog_DefaultToolbarViewController_swift.html
InformationsquelleAutor der Antwort FredL
Die naheliegendste Ursache für diese (der Vollständigkeit halber enthalten) ist falsch casting einen Zeiger und ruft eine Methode von der falschen Klasse.
InformationsquelleAutor der Antwort devios1
Ich hatte ein ähnliches problem, aber bei mir war die Lösung etwas anders. In meinem Fall habe ich eine Kategorie aus, um eine vorhandene Klasse erweitern (UIImage für einige resizing-Funktionen - siehe das howto falls du interessiert bist) und vergessen die *.m Datei auf das target build. Dummer Fehler, aber nicht immer offensichtlich, wenn es passiert, wo zu suchen. Ich dachte, es lohnt sich teilen...
InformationsquelleAutor der Antwort Mirko Jahn
Ich hatte den gleichen Fehler und ich entdeckte Folgendes:
Wenn Sie code verwenden, die
Können Sie denken, dass es sucht der Selektor:
Aber es ist eigentlich auf der Suche nach dem Wähler:
Diese Auswahl nicht vorhanden, so erhalten Sie die crash.
Können Sie ändern Sie den Selektor zu empfangen (id)sender um, den Fehler zu lösen.
Aber was ist, wenn Sie andere Funktionen haben, rufen Sie die refresh-Funktion ohne bietet einen Absender? Sie benötigen eine Funktion, die funktioniert für beide. Einfache Lösung ist das hinzufügen einer anderen Funktion:
Und ändern Sie dann die refresh-pulldown-code aufrufen, der Selektor statt:
Ich mache auch die Stanford iOS natürlich auf einem älteren Mac, der nicht erweitert werden kann, um die neueste version von Mac OSX. Also ich bin noch im Aufbau für iOS 6.1, und dies löste das problem für mich.
InformationsquelleAutor der Antwort Joseph Pride
Ich glaube, Sie sollten die leere, statt die IBAction im Gegenzug geben. denn Sie definiert ein button-programmgesteuert.
InformationsquelleAutor der Antwort Fa.Shapouri
Ich hatte auch das gleiche Problem.
Ich gelöscht meine uibutton in meinem storyboard und neu erstellt .. nun funktioniert alles wunderbar.
InformationsquelleAutor der Antwort Yohan Dahmani
Ich bin derzeit lernen die iOS-Entwicklung und durch den der "Beginning iOS 6 Development" Buch von aPress. Ich war immer die gleichen Fehler in Kapitel 10:Storyboards.
Es dauerte zwei Tage, um es herauszufinden, aber fand heraus, dass ich versehentlich das TableView cell-tag 1, wenn ich nicht haben sollte. Für jemand anderes tut dieses Buch und erhalten Sie eine ähnliche Fehlermeldung, ich hoffe, das hilft.
Ich hoffe wirklich, dass zukünftige Fehler in meinem code sind leichter zu finden! hahaha. Die debug-Fehler Tat nichts, um mich drängen, mich in die richtige Richtung, um es herauszufinden (oder zumindest ich bin zu neu, um zu verstehen, debugger, lol).
InformationsquelleAutor der Antwort Shannon Cole
In meinem Fall war ich mit einer UIWebView und ich an einem NSString im zweiten parameter statt einer NSURL. Also ich vermute, dass die falsche Klasse Typen an Funktionen, die diesen Fehler verursachen können.
InformationsquelleAutor der Antwort jbaylina
..Und nun meine
Hatte ich die Schaltfläche mit einer Methode, die aufgerufen eine andere Taste, die parameter und das hat Super funktioniert ABER sobald ich versuchte, etwas zu tun mit der Schaltfläche selbst, bekam ich einen crash. Beim kompilieren werden keine Fehler angezeigt wurde.. Lösung?
Ich konnte nicht link der button zum file ' s owner. Also, wenn hier jemand ist so dumm wie bei mir, versuchen Sie dies 🙂
InformationsquelleAutor der Antwort user2875404
Noch eine weitere etwas andere Lösung/Fall.
Ich bin mit Xamarin und MvvmCross und ich versuchte, mich zu binden, das UIButton auf ein ViewModel. Ich hatte das UIButton WLAN bis zu einer Steckdose und einem TouchUpInside.
Verbindlich, wenn ich nur den Ausgang:
Alle die ich tun musste, war, entfernen Sie die Aktion (TouchUpInside) - Verbindung in XCode und dass es gelöst.
P. S.
Ich denke, dies ist in seiner Basis alle im Zusammenhang mit der vorherigen Antworten und @Chris Kaminski in bestimmten, aber ich hoffe, das jemand hilft...
Cheers.
InformationsquelleAutor der Antwort YKa
Ich hatte das gleiche Problem. Das problem für mich war, dass eine Taste hatte die beiden Action-Methoden. Was ich Tat, war eine erste Aktion, die Methode für meine button und dann gelöscht in der view-controller, aber vergessen haben, trennen Sie die Verbindung über das Haupt-storyboard in Verbindung Inspektor. Also, wenn ich fügte hinzu, eine zweite Methode Aktion waren es nun zwei Methoden für die Aktionen für eine Schaltfläche, die den Fehler verursacht hat.
InformationsquelleAutor der Antwort Harshil.Chokshi
Für mich war es ein überbleibsel erstellte Verbindung im interfacebuilder bij Strg-ziehen. Der name des abgebrochenen Verbindung war in der Fehler-log -
Hatte ich eine Aktion verbunden, um eine Schaltfläche. Drücken Sie die Taste stürzte die app, weil die Verkaufsstelle nicht mehr gab es in meinem code.
Die Suche nach dem Namen in das Protokoll führte mich in das storyboard. Gelöscht, und der Absturz war Weg!
InformationsquelleAutor der Antwort Tom Brinkkemper
Dies geschah zu meiner, weil versehentlich löschen Sie die "@IBAction func... " in meinem UIViewcontroller-Klasse code, also in das Storyboard erstellt wurde, die Referenz-Outlet, aber zur Laufzeit gibt es irgendeine Funktion, um es zu verarbeiten.
War die Lösung zum löschen der Steckdose Referenz innerhalb der Eigenschafteninspektor und dann neu ziehen mit Ctrl-Taste, um die Klasse code.
Hoffe, es hilft!
InformationsquelleAutor der Antwort Guillermo
Ich bin der Beantwortung von Leonard Challis, da war ich auch unter den Stanford iOS Klasse C193P, wie user "oli206"
"Terminating app due to uncaught exception 'NSInvalidArgumentException', Grund:"
Das problem war, dass ich die "Enter" - Taste an den Rechner angeschlossen zweimal,und ein Freund wies darauf hin, dass dies eine Inspektion der Schaltfläche in das Storyboard gezeigt, dass 2 Einträge wurden auf den "Touch Up Inside" - Attribute, wenn ich mit der rechten Maustaste auf die "Enter" - Taste. Löschen eines der beiden "Touch Up Inside" "Sent Events" hat das problem gelöst.
Diese zeigte, dass das problem ausgelöst wird (für die C193P video-Klasse auf den Rechner Exemplarische Vorgehensweise bei der Zuweisung 1) 2 gesendeten Ereignisse, von denen verursacht wurde, die Ausnahme.
InformationsquelleAutor der Antwort Peter_from_NYC
Kann es passieren, wenn du Sie nicht zuordnen, der ViewController für die ViewControllerScene in
der InterfaceBuilder. Also dem ViewController.m ist nicht an der Szene.
InformationsquelleAutor der Antwort Vincent
Darunter auch meinen Anteil. Ich steckengeblieben auf dieser für eine Weile, bis ich erkannte, ich habe ein Projekt erstellt mit ARC(Automatic counting reference) deaktiviert. Eine schnelle Einstellung auf JA auf der option, dass mein Problem gelöst.
InformationsquelleAutor der Antwort caiocpricci2
Ist auch eine wirklich dumme Ursache HIERFÜR ist, dass der Selektor in der Schnittstelle definiert(.h), nicht aber in der Umsetzung(.m) (p.e. Tippfehler)
InformationsquelleAutor der Antwort jla
Anderen Grund/Lösung zu der Liste hinzufügen. Dieser ist verursacht durch iOS6.0 (und/oder schlechte Programmierung). In älteren Versionen der Selektor übereinstimmen würden, wenn die parameter-Typen abgestimmt, aber in iOS 6.0 bekam ich Systemabstürze in bisher funktionierenden code, wo die Namen der parameter war nicht korrekt.
Ich war etwas wie
aber in der definition (beide .h und .m) hatte ich
Klappte auf iOS5, aber nicht auf 6, auch den exakt gleichen build bereitgestellt, um verschiedene Geräte.
Verstehe ich nicht, warum der compiler coudn ' T sagen Sie mir dies, eh - problem besohlt.
InformationsquelleAutor der Antwort Tim T
Dies auch passieren könnte, wenn Sie wollen, um eine Immobilie von einem ControllerA einer öffentlichen Eigenschaft, die in einem speziell ControllerB Klasse und Sie haben nicht die "individuelle Klasse" im identity-inspector in storyboards noch.
InformationsquelleAutor der Antwort Francisco Gutiérrez
Andere mögliche Lösung: Hinzufügen von "- ObjC", um Ihre linker Argumente.
Vollständige Erklärung ist hier: Objektive-C Kategorien in statische Bibliothek
Ich denke, die Kernaussage ist: wenn die Kategorie ist in einer Bibliothek definiert Sie die statische Verknüpfung mit der linker ist nicht smart genug ist, um link in der Kategorie Methoden. Die Flagge oben macht der linker link in alle objective-C Klassen und Kategorien, nicht nur diejenigen, die es denkt es braucht, um auf Basis der Analyse Ihrer Quelle. (Bitte fühlen Sie sich frei, zu optimieren oder zu korrigieren, die Antwort. Ich wusste, zu miteinander Sprachen, so bin ich einfach Nachplappern, hier).
InformationsquelleAutor der Antwort Russ Egan
Mein problem und die Lösung war anders und ich dachte, ich sollte es hier posten, damit zukünftige Leser können sparen Sie Ihren Kopf vom klopfen an der Wand.
War ich die Zuweisung unterschiedlicher xib zu gleichen UIVIewController und auch nach der Suche überall konnte ich nicht finden, wie man es richtig. Dann überprüfte ich mein AppDelegate, wo ich war, Berufung
initWithNibName
und sehen können, dass beim kopieren der code, ich habe die xib-Namen, aber vergessen zu ändernUIViewController
Klasse. Also, wenn keiner die Lösung funktioniert für Sie, überprüfen Sie IhreinitWithNibName
Methode.InformationsquelleAutor der Antwort noob
Mir passiert ist, weil widersprüchliche constraint-Argumente.
InformationsquelleAutor der Antwort Alex Bedro
Grundlagen: Dynamic Invocation
Den objective-C ist eine dynamische Sprache, die ruft Methoden von der Suche zur Laufzeit der Methoden in den Klassen. Zum Beispiel, wenn es Klasse Aeinschließlich Methode DoSomething(arg1, arg2). Wenn Sie versuchen, rufen Sie die Methode unter Verwendung der korrekten Argumente, die auf ein Objekt der Klasse A alles funktioniert Prima. Allerdings, wenn die Argumente nicht geht richtig, zum Beispiel, nannten Sie die Methode mit einem argument nur dann den Lauf-Zeit-behandeln diese wie ein Methodenaufruf für eine andere Methode. Schließlich, ausführen-die Zeit wird nicht zu finden, die Methode (DoSomething mit einem argument) und wird durch diese Ausnahme "unrecognized selector geschickt Instanz".
Lösung
Bitte prüfen Sie, was Signatur für @selector erwartet. In der Regel ist es, wie du es beschrieben in den code
InformationsquelleAutor der Antwort hadaytullah