1279 Stimmen

Xcode - Wie behebt man den 'NSUnknownKeyException'-Fehler? Grund: ... Diese Klasse ist nicht schlüsselwertcodierfähig für den Schlüssel X"?

Ich versuche, ein UILabel mit einem IBOutlet zu verknüpfen, das in meiner Klasse erstellt wurde.

Meine Anwendung stürzt mit folgendem Fehler ab.

Was bedeutet das?

Wie kann ich das beheben?

*** App-Beendigung aufgrund von unbehandelter Ausnahme 'NSUnknownKeyException', Grund: '[ setValue:forUndefinedKey:]: Diese Klasse ist nicht schlüsselwertcodierfähig für den Schlüssel XXX.'

6voto

Mike M. Lin Punkte 9872

Ich hatte das gleiche Symptom. Die Ursache war, dass die "Zielmitgliedschaft" für meine Quelldatei nicht auf das richtige Ziel gesetzt war. Ich nehme an, das bedeutet, dass meine Klasse nicht erstellt und in meiner App enthalten wurde.

Um es zu korrigieren:

  1. Markieren Sie Ihre .m-Datei.
  2. Wählen Sie im rechten Bereich den Dateiinspektor aus.
  3. Stellen Sie sicher, dass unter dem Abschnitt "Zielmitgliedschaft" das entsprechende Build-Ziel aktiviert ist.

Hoffentlich hilft das jemandem da draußen.

6voto

Damo Punkte 12642

Wenn Sie eine benutzerdefinierte UIViewController-Unterklasse mit IBOutlets haben, die Probleme verursachen, waren die einzigen Schritte, die ich gefunden habe, um den Fehler tatsächlich loszuwerden:

.1 Ändern Sie die Klasse in UIViewController.

.2 Trennen Sie alle Verbindungen zu den Outlets (sie werden jetzt alle das gelbe Warnungsdreieck haben) - es reicht möglicherweise aus, nur die problematischen Outlets zu trennen.

.3 Führen Sie alle Standard-Schritte aus - K, löschen Sie abgeleitete Daten (, Gebetsteppiche, Sorgenperlen).

.4 Starten Sie die App - gehen Sie zur problematischen Szene.

.5 Beenden Sie die App, gehen Sie zurück zum Interface Builder und ändern Sie die Klasse wieder in den Namen Ihrer benutzerdefinierten Klasse.

.6 Verbinden Sie Ihre Outlets wieder.

Starten Sie die App, und normalerweise sind die Key-Value-Konformitätsprobleme dann behoben.

4voto

Joakim Sjöstedt Punkte 624

In meinem Fall war es das Modul, das für das falsche Ziel angegeben wurde. Das Löschen des Modul-Namens und das Überprüfen von Modul vom Ziel erben hat den Trick gemacht.

Bildbeschreibung eingeben

4voto

wspruijt Punkte 999

In meinem Fall wurde dies durch die Verweisung auf das falsche Nib verursacht:

BMTester *viewController = [[BMTester alloc] initWithNibName="WrongNibName" bundle:nil];

3voto

Symmetric Punkte 3943

Ich hatte dieses Problem mit Storyboards. Die oben genannte Lösung schien nicht das Problem zu sein, also habe ich den ViewController gelöscht und ihn wieder hinzugefügt (und natürlich das Segue neu verbunden und die Klasse neu zugewiesen), was das Problem behoben hat. Ich weiß nicht, was es wirklich war, aber ich hatte kurz zuvor die zugehörige ViewController-Klasse umbenannt, also hatte das vielleicht etwas durcheinandergebracht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X