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

32voto

kubi Punkte 46128
  1. Sie müssen IBOutlet nur einmal angeben, das IBOutlet Label Ihres ivar ist unnötig.
  2. Instantiieren Sie Ihr NIB mit Ihrem UIViewController? Irgendwann sollten Sie [SecondView initWithNibName:@"yourNibName" bundle:nil]; aufrufen.

30voto

Maj Punkte 341

Dies ist mir nur passiert, als ich auf einem Gerät (iPhone) debuggte. Der iOS-Simulator funktionierte einwandfrei. Ein "Produkt-> Bereinigen" aus Xcode schien das Problem zu lösen, aber ich habe keine Ahnung warum.

23voto

2095377 Punkte 47

Es kann daher kommen, dass du ein Outlet oder eine Aktion erstellt hast, indem du sie per Drag & Drop kontrolliert hast und vergessen hast, es zu löschen. Selbst wenn du den Code gelöscht hast oder sogar genug cmd+Z gemacht hast, musst du den Verbindungsinpektor deines Storyboards öffnen und überprüfen, ob die erstellte Aktion oder das erstellte Outlet noch vorhanden ist.

23voto

Yannis Punkte 201

Ich hatte genau die gleiche Fehlermeldung und danke (!!) an Kira von http://www.idev101.com konnte ich die Herausforderung lösen. Ich habe ihre Seite nur gefunden, nachdem ich gegoogelt und alle diese Threads gestapelt hatte. Ich poste jetzt hier für die nächste Person, die zu StackOverFlow kommt und die gleiche Herausforderung hat wie ich, da diese Person höchstwahrscheinlich über Google zu diesem Thread kommen wird.

Ich habe festgestellt, dass ich folgendes falsch gemacht habe:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

Stattdessen DAS:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

Wo

DeviceViewController

Der Name meiner Klasse war, auch bekannt als

DeviceViewController.h 
DeviceViewController.m

Du musst

"import DeviceViewController.h"

in deiner Implementierung (.m Datei) hinzufügen, wenn du z.B. ein anderes UIViewController aufrufen möchtest.

Es tut mir absolut nicht leid, wenn ich nur das Offensichtliche für Anfänger wie mich feststelle und möglicherweise Downvotes erhalte, da dies nicht genau mit der Frage zusammenhängt, aber ich habe jetzt seit 4 (?!?) Stunden ununterbrochen nach der Antwort auf diese Fehlermeldung gesucht. Wenn ich das für 1 oder 2 Personen ersparen kann, wäre das großartig :)

PS: Für diejenigen, die daran interessiert sind, wie der Code für das Laden des anderen UIViewControllers fortgesetzt wird:

    [self presentViewController:deviceViewController animated:YES completion:nil];

23voto

Suragch Punkte 420096

Beim Überprüfen der anderen Antworten scheint es viele Dinge zu geben, die diesen Fehler verursachen können. Hier ist noch einer.

Wenn Sie

  • eine benutzerdefinierte Ansicht haben
  • eine @IBInspectable-Eigenschaft hinzugefügt haben
  • und sie später gelöscht haben

Dann können Sie auch einen ähnlichen Fehler wie diesen erhalten

Fehler beim Setzen der (xxx) benutzerdefinierten inspizierten Eigenschaft auf [Ihre benutzerdefinierte Ansicht] ...: Diese Klasse ist nicht schlüsselwertkodierungs-kompatibel für den Schlüssel [xxx].

Die Lösung besteht darin, die alte Eigenschaft zu löschen.

Bildbeschreibung hier eingeben

Öffnen Sie den Identitätsinspektor für Ihre Klasse, wählen Sie den Eigenschaftsnamen unter Benutzerdefinierte Laufzeitattribute aus und drücken Sie die Minustaste (-).

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