Frage Was bedeutet das? "'NSUnknownKeyException', Grund: ... diese Klasse ist für den Schlüssel X nicht Schlüsselcodierung-kompatibel"


Ich versuche eine Verbindung herzustellen UILabel mit einem IBOutlet in meiner Klasse erstellt.

Meine Anwendung stürzt mit dem folgenden Fehler ab. Was bedeutet das? Wie kann ich es reparieren?

*** Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSUnknownKeyException', Grund: '[<UIViewController 0x6e36ae0> setValue: fürUndefinedKey:]: Diese Klasse ist für den Schlüssel XXX nicht Schlüsselcodierkonform.'


983


Ursprung


Antworten:


Ihr View-Controller hat möglicherweise die falsche Klasse in Ihrem Xib.

Ich habe dein Projekt heruntergeladen.

Der Fehler, den Sie bekommen, ist

'NSUnknownKeyException', Grund: '[<UIViewController 0x3927310> setValue: forUndefinedKey:]: Diese Klasse ist für die Schlüsselzeichenfolge nicht Schlüsselcodierkonform.'

Es ist durch die verursacht Second Controller anzeigen in MainWindow.xib eine Klasse von haben UIViewController Anstatt von SecondView. Der Wechsel zur richtigen Klasse behebt das Problem.

Übrigens ist es in Objective-C schlecht, Namen wie "string" zu haben. Es lädt eine Laufzeitbenennungskollision ein. Vermeide sie auch in einmaligen Apps. Kollisionen zu benennen, kann sehr schwer zu finden sein und Sie möchten die Zeit nicht 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 diese Verknüpfung irgendwie zum ursprünglichen Controller bei, selbst nach dem Bearbeiten und erneuten Verknüpfen dieses Elements mit dem neuen Controller.


807



Möglicherweise haben Sie eine schlechte Verbindung in Ihrer Xib.

Ich habe diesen Fehler viele Male gehabt. Während TechZens Antwort in diesem Fall absolut richtig ist, ist eine andere häufige Ursache, wenn Sie Ändern Sie den Namen einer IBOutlet-Eigenschaft in Ihrer .h / .m, die Sie bereits mit dem Eigentümer der Datei in der Feder verbunden haben.

Von deiner Feder:

  1. Wählen Sie das Objekt in IB und gehen Sie zum "Inspektor für Verbindungen".
  2. Stellen Sie unter "Referenzieren von Outlets" sicher, dass Ihr Objekt nicht mit dem alten Eigenschaftsnamen verbunden ist ... wenn ja, Klicken Sie auf das kleine 'x', um die Referenz zu löschen und baue es wieder.

    example 1

Eine weitere häufige Ursache, wenn Sie Storyboard verwenden, könnte Ihr UIButton mehr als eine Zuweisung haben (Lösung ist fast die gleiche wie für Nib):

  1. Öffne dein Storyboard und klicke mit der rechten Maustaste auf die UIB-Taste
  2. Sie werden feststellen, dass dieser Schaltfläche mehr als eine Zuweisung / Referenz zugeordnet ist. Entferne eines der grauen "Main ..." - Fenster mit dem kleinen "x":

    example 2


1397



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


101



Ich hatte diesen Fehler, als ich versuchte, ein benutzerdefiniertes ViewCell für eine Tabelle zu implementieren. Als ich den View-Controller für die XIB markiert habe und mit den Elementen in der CellView verbunden war, verursachte der Fehler "diese Klasse ist nicht Schlüsselcodierung-kompatibel für den Schlüssel" sobald ich diese löschte, wurde der Fehler behoben.

Löschen Sie die Verbindungen im folgenden Bild. Delete the connections in inspector when File Owner is highlighted

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

The connection should be in here when Table View Cell is highlighted


84



Wenn es sich um eine reine iPhone-App handelt, stellen Sie sicher, dass das folgende Feld leer ist:

Ziele> Zusammenfassung> iPhone / iPod-Bereitstellungsinformationen> Hauptoberfläche

Wenn Sie dort eine Xib angeben, stürzt es ab.


61



Dieser Fehler weist auf einen bereits verbundenen Interface Builder hin Objekt wird entfernt / umbenannt in der Quelle seines Besitzers (Eigentümer der Datei).

Klicken Sie bei gedrückter Strg-Taste auf Besitzer der Dateien im Interface Builder, wenn Sie a sehen Ausrufezeichen Sie müssen das beheben.

Im Bild unten sehen Sie, dass "aRemovedView" rechts ein Ausrufezeichen hat, weil ich das IBOutlet-Ansichtsobjekt entfernt habe, während es bereits im IB verbunden war.

enter image description here

Dies gibt den folgenden Fehler: Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSUnknownKeyException', Grund: '[setValue: forUndefinedKey:]: Diese Klasse ist für den Schlüssel nicht Schlüsselcodierkonform aRemovedView. '


56



Ich hatte das gleiche Problem und während TechZens Antwort in der Tat erstaunlich ist, fand ich es schwierig, mich auf meine Situation zu beziehen.

Schließlich habe ich das Problem gelöst, indem ich das Etikett über den unter aufgeführten Link verknüpft habe Objekte (im Bild unten hervorgehoben) statt über die Dateieigentümer.

Hoffe das hilft.

enter image description here


40