webentwicklung-frage-antwort-db.com.de

Unbekannte Klasse im Schnittstellenersteller

Ich weiß, dass es zu diesem Thema viele Fragen gibt, aber ich habe die meisten von ihnen ausprobiert, um es ohne Erfolg zu versuchen.

das Problem: Zuerst konnte ich meine Klasse nicht aus dem Assistenteneditor hinzufügen, da die benutzerdefinierte Klasse sie nicht aufnahm. 

  1. Ich habe sichergestellt, dass die Aufrufe von uiviewcontroller erben
  2. Ich habe sichergestellt, dass die Klasse zum Ziel hinzugefügt wird 
  3. Ich habe versucht, die Klassendatei zu entfernen und sie wieder hinzuzufügen
  4. schließlich habe ich die Klasse über die Storyboard-XML hinzugefügt und in der benutzerdefinierten Klasse angezeigt

Jetzt versuche ich meine Schaltflächen, Ansichten usw. mit den Ausgängen zu verbinden. Es scheint, als wären sie verbunden, aber beim Ausführen der App und beim Öffnen dieses View-Controllers stürzt die App ab und der Debugger druckt: "Unbekannte Klasse xxx in der Interface Builder-Datei." Und dann "Diese Klasse ist nicht vorhanden Schlüsselwertcodierungskonform für den Schlüssel BtnMenu. "

Ich habe geprüft:

  1. Dieser Verbindungsinspektor ist richtig eingestellt (kein Fehler in den Ausgängen dort)
  2. Es wurde versucht, abgeleitete Daten zu löschen
  3. Projekt reinigen
  4. Installieren Sie die App erneut

Ich habe sogar versucht, meinen Mac neu zu starten und natürlich keinen Erfolg.

kann jemand hier etwas Licht beschatten? danke.

20
Max

Ich hatte dies gerade mit einer UIViewController-Unterklasse (mit Xcode 9 Beta 2 & Swift 4) und die Lösung bestand darin, "Von Ziel übernehmen" anzukreuzen, wo ich die benutzerdefinierte Klasse in IB eingestellt habe.

Wenn sich Ihre Ansicht in einer .bundle-Datei befindet (z. B. für eine Framework-/Static-Bibliothek), die in ein anderes Ziel kopiert wird, sollten Sie für jede Xib/Storyboard-Klasse ein explizites Modulziel festlegen, anstatt dass sie von diesem erben das Ziel, das es hostet.

63
Anthony Scott

Für mich bestand das Problem darin, dass die Klasse nicht Teil der Zielmitgliedschaft war. Fügen Sie einfach die Klasse zum Ziel hinzu und Sie sollten sie im Interface Builder sehen. Dies half in meinem Fall. 

 enter image description here

16
Mr. Desai

Nachdem ich das Häkchen "Inherit Module From Target" in "Custom Class" im View Controller-Bereich markiert habe, funktioniert es einwandfrei. Kann dem Bild folgen.

Um dies zu finden> Wählen Sie die gelbe Schaltfläche für den Ansichts-Controller > und klicken Sie auf " Identitätsinspektor anzeigen "> aktiviere dann das Häkchen " Modul vom Ziel erben "

enter image description here

7
Shihab Uddin

Ich hatte dieses Problem mit einem benutzerdefinierten UIView, den ich gerade testete, wo sich der UIView in einem Framework befand. Ich hatte eine einfache App erstellt, eine UIView im Standard-ViewController des Storyboards erstellt und die Klasse auf MyCustomView gesetzt. Ich habe immer den Fehler "Unknown class in interface builder" erhalten, als die App gestartet wurde. Ich importierte mein Framework und überprüfte das eingebaute Produkt, dass das Framework vorhanden war.

Das Problem war, dass mein Test-App-Code das Framework nie wirklich verwendete. Obwohl das Storyboard darauf verwiesen hat, wurde es wohl nie geladen. Als ich einen [MyCustomView load]; in den Code der Test-App eingefügt habe, hat alles funktioniert.

2
Ben

Ich bin auf diesen Fehler gestoßen, weil ich meine Klassendatei beim Erstellen versehentlich im Ordner Base.lproj gespeichert habe. 

Ich habe den Fehler behoben, indem ich mit der rechten Maustaste auf die Datei im Projektnavigator geklickt und den Verweis darauf gelöscht habe. Ich habe die Datei dann durch den Finder in den richtigen Ordner verschoben. Dann habe ich im Projektnavigator mit der rechten Maustaste auf die Hauptgruppe geklickt, auf Add Files to "GroupName"... geklickt, die Klasse ausgewählt und auf die Schaltfläche Add geklickt.

Danach ging der Fehler weg.

1
jhonkaman

Was @Anthony Scott erwähnt hat, ist wahr, bis Framework_A von Framework_B abhängig ist und die Klasse von Framework_B stammt. Danke für die Frage übrigens. Ich verwende das Commons-Framework für andere Frameworks und es half mir, dies zu realisieren;) Für diejenigen, die benutzerdefinierte Cocoa Touch-Frameworks entwickeln, kann dies hilfreich sein. 

1
travdu

ok, ich weiß nicht wie und warum, aber ich tat (wieder), was ich schon probiert habe, bevor:

  1. klasse löschen
  2. erstellen der gleichen Klasse mit neuem Namen
  3. die Szene wurde entfernt und im Storyboard neu erstellt
  4. alles verbunden (auf die gleiche Weise !!!)

jetzt scheint es, dass Xcode meine Klasse kennt ... Ich weiß immer noch nicht, was das Problem war, aber ich denke, es hat etwas mit dem Linker zu tun.

1
Max

Wenn Sie versuchen, einem ViewController eine Klasse zuzuweisen, stellen Sie sicher, dass die von Ihnen erstellte Klasse einen UIViewController erbt. Der einzige Grund, aus dem xCode Ihre Klasse nicht erkennt, ist ein anderer Instanztyp, beispielsweise ein UITableViewController-Typ.

Bitte überprüfen Sie zuerst die Vererbung Ihrer Klasse. 

0
Natasha

Sie müssen den View Controller mit der benutzerdefinierten Klasse instanziieren. Ohne das könnten Sie den Fehler haben.

self.storyboard!.instantiateViewController(withIdentifier: "namePage") as! EmailAndPassword
0
Aaron Zheng

Überprüfen Sie den Namen Ihrer Klasse. Stellen Sie sicher, dass es der Klasse entspricht, der Sie Ihren ViewController im Eigenschafteninspektor zugewiesen haben.

0
Mo Iisa

nichts davon hat geholfen. Mein Problem war, dass ich benutzerdefinierte Storyboards erstellt und benutzerdefinierte Klassen hinzugefügt habe. Aber ich habe vergessen, den anfänglichen View-Controller-Pfeil vom automatisch generierten Haupt-Storyboard zu nehmen, und das anfängliche Storyboard in mein benutzerdefiniertes Storyboard geändert, wodurch es für mich behoben wurde.

0
sibin