Ich versuche, die Stanford CS193p iOS Programmiervorlesungen zu verfolgen. Eines der Demo-Programme namens "Happiness" erstellt zwei UIViewControllers, einen "PsychViewController" und einen "HappinessViewController". Es geht vom PsychViewController zum HappinessViewController über eine Zielaktionsmethode.
Der folgende Code verursacht weiterhin diese Ausnahme: "- [UIViewController setHappiness:]: unerkannter Selektor, der an die Instanz"
gesendet wurdeHier ist der anstößige Code:
%Vor%Ich habe diese Site und andere Seiten durchsucht, und normalerweise tritt dieser Fehler auf, weil der generische UIViewController nicht korrekt auf das im Programm verwendete View-Controller-Objekt eingestellt wurde, in diesem Fall auf den "HappinessViewController". Aber ich habe den generischen UIViewController mit dem Identity Inspector in IB als HappinessViewController eingestellt, und ich bekomme immer noch die Ausnahme. Ich reiße mir die Haare aus, wenn jemand helfen könnte, wäre es sehr geschätzt.
Ich habe das Problem herausgefunden. Obwohl ich korrekt angegeben hatte, dass der relevante UIViewController ein HappinessViewController war, wurde der Linker aus irgendeinem Grund nicht mit den richtigen Dateien verknüpft. Die Lösung bestand darin, auf die .xcodeproj-Datei in Xcode doppelzuklicken, dann zu Build Phases zu gehen und die Dateien manuell unter "Compile Sources" hinzuzufügen.
Schauen wir uns die Ausnahme an:
%Vor% Dies sagt Ihnen zwei Dinge über die Nachricht, die nicht erkannt wurde. Es zeigt Ihnen den Selektor setHappiness:
. Es teilt Ihnen auch die aktuelle Laufzeitklasse des Empfängers mit, UIViewController
.
Natürlich hat UIViewController
keine Methode namens setHappiness:
. Deshalb hast du die Ausnahme.
Sie haben eine Unterklasse von UIViewController
namens HappinessViewController
geschrieben, die eine setHappiness:
-Methode (oder eine Lese- / Schreibeigenschaft namens happiness
, die die Methode generiert) erstellt. Und Sie beabsichtigten, dass der Empfänger (der Zielansichtscontroller) eine Instanz dieser Unterklasse ( HappinessViewController
) ist.
Aber die Ausnahme besagt, dass der Ziel-View-Controller nur ein einfacher UIViewController
ist. Auch wenn Sie das vermutlich getan haben, haben Sie wahrscheinlich nicht die benutzerdefinierte Klasse des Ansichtscontrollers im Storyboard festgelegt. Vielleicht haben Sie die benutzerdefinierte Klasse eines anderen View-Controllers festgelegt, aber Sie haben die Klasse für das Ziel dieses Segments nicht festgelegt.
Sie müssen die benutzerdefinierte Klasse des Zielansicht-Controllers im Identity Inspector wie folgt einstellen:
Für mich hat das Ändern der Klasse des View-Controllers im Storyboard funktioniert.
Ich hatte heute das gleiche Problem und es war, weil meine benutzerdefinierte Klasse in einer Bibliothek war. Die Bibliothek selbst wurde in Build-Phasen verlinkt, aber das allein reichte nicht aus, um die Klasse zu erfassen. So habe ich es schließlich gelöst, indem ich die folgende Zeile zu meinem AppDelegate hinzufüge.
%Vor%Dies zwingt den Linker, die Klasse einzubinden. Andernfalls reicht ein einfaches Verknüpfen in der Bibliothek möglicherweise nicht aus, um die Klasse einzubinden, es sei denn, es wird irgendwo in der Anwendung darauf verwiesen.
Überprüfen Sie, welche prepareForSegue ausgelöst wird. Mein Problem war, dass 2 Segmente im aktuellen viewController und im eingehenden viewController ausgelöst wurden. Die Lösung und immer eine gute Übung ist es, Segueidentifikatoren zu überprüfen.
%Vor%Tags und Links objective-c segue interface-builder ios6 cs193p