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.'

1626voto

nuttysimple Punkte 2791

Sie haben möglicherweise eine schlechte Verbindung in Ihrem XIB.

Ich hatte diesen Fehler schon oft. Obwohl die Antwort von TechZen in diesem Fall absolut richtig ist, ist eine weitere häufige Ursache, wenn Sie den Namen einer IBOutlet-Eigenschaft in Ihrer .h/.m ändern, die Sie bereits mit dem Dateibesitzer im NIB verbunden haben.

Aus Ihrem NIB:

  1. Wählen Sie das Objekt in IB aus und gehen Sie zum 'Verbindungsinspektor'.
  2. Unter 'Referenzierte Outlets' stellen Sie sicher, dass Ihr Objekt nicht mehr mit dem alten Eigenschaftsnamen verbunden ist... falls doch, klicken Sie auf das kleine 'x', um die Verbindung zu löschen und bauen Sie erneut.

    Bildbeschreibung hier eingeben

Eine weitere häufige Ursache, wenn Sie Storyboard verwenden, ist, dass Ihr UIButton möglicherweise mehr als eine Zuweisung hat (Die Lösung ist fast die gleiche wie für NIB):

  1. Öffnen Sie Ihr Storyboard und klicken Sie mit der rechten Maustaste auf den UIButton
  2. Sie werden feststellen, dass es mehr als eine Zuweisung/Verweis auf diesen Button gibt. Entfernen Sie eines der "Main..." grauen Fenster mit dem kleinen "x":

    Beispiel 2

1053voto

TechZen Punkte 64117

Ihr Ansichtscontroller hat möglicherweise die falsche Klasse in Ihrem Xib.

Ich habe Ihr Projekt heruntergeladen.

Der Fehler, den Sie erhalten, lautet

'NSUnknownKeyException', Grund: '[ setValue:forUndefinedKey:]: Diese Klasse ist nicht schlüsselwertcodierungsfähig für den Schlüssel string.'

Der Fehler wird durch den Second Ansichtscontroller in MainWindow.xib verursacht, der eine Klasse von UIViewController anstelle von SecondView hat. Das Ändern zur korrekten Klasse löst das Problem.

Übrigens ist es schlechte Praxis, Namen wie "string" in Objective-C zu haben. Es lädt zu einer Namenskollision zur Laufzeit ein. Vermeiden Sie sie auch in einmaligen Übungs-Apps. Namenskollisionen können sehr schwer zu verfolgen sein und Sie möchten keine Zeit verschwenden.

Ein weiterer möglicher Grund für diesen Fehler: Beim Kopieren und Einfügen von Elementen von einem Controller in einen anderen behält Xcode irgendwie diese Verknüpfung zum ursprünglichen Controller bei, selbst nachdem dieses Element bearbeitet und neu mit dem neuen Controller verknüpft wurde.

Ein weiterer möglicher Grund für diesen Fehler:

Schlechte Outlet.

Sie haben entweder einen Outlet-Namen in Ihrer .h Datei entfernt oder umbenannt.

Entfernen Sie ihn in der Verbindungsinpektion der .xib oder .storyboard Datei.

Noch ein möglicher Grund

(In meinem Fall) Erweiterung von UIView mit bindbaren Eigenschaften und Setzen von Werten für diese bindbaren Eigenschaften (z.B. Schatten, Eckenradius etc.), dann Entfernen dieser Eigenschaften aus der UIView-Erweiterung (aus irgendeinem Grund) aber die folgenden blieben im XML (von foo.storyboard):

Lösung: Rechtsklick auf foo.storyboard > Als Quellcode öffnen > Suche nach keyPath (z.B. shadowRadius) > Löschen Sie die , die das Problem verursachen

140voto

mrabins Punkte 197

Manchmal hat das mit deinem "Von Ziel erben" zu tun. Dieser Wert muss festgelegt sein. Bei einzelnen Ziel-Apps können Sie einfach "Von Ziel erben" auswählen. Wenn Sie mehr als ein Ziel haben, wählen Sie das gewünschte Ziel aus.

Bildbeschreibung eingeben

125voto

uplearned.com Punkte 3245

Ich hatte diesen Fehler, als ich versuchte, eine benutzerdefinierte ViewCell für eine Tabelle zu implementieren. Als ich den View-Controller für die XIB markierte und mit den Elementen in der CellView verband, trat der Fehler "Diese Klasse ist nicht schlüsselwertkodierungskonform für den Schlüssel" auf. Als ich diese Verbindungen gelöscht habe, war der Fehler behoben.

Löschen Sie die Verbindungen im untenstehenden Bild. Löschen Sie die Verbindungen im Inspector, wenn der Dateibesitzer markiert ist

Stellen Sie sicher, dass Sie nur die Verbindungen mit der TableView-Zelle haben. Um dies zu überprüfen, klicken Sie auf die TableView-Zelle und suchen Sie in INSPECTOR nach Ihren Verbindungen.

Die Verbindung sollte hier sein, wenn die TableView-Zelle markiert ist

122voto

Steve Rogers Punkte 1943

Ich musste die App aus dem Simulator/iPhone löschen, um diesen Fehler loszuwerden.

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