it-swarm.com.de

Xcode 6-Fehler: Unbekannte Klasse in Interface Builder-Datei

Ich habe ein Upgrade auf Xcode 6 Beta 4 durchgeführt, und jetzt stürzt meine App kontinuierlich mit der Nachricht ab

Unbekannte Klasse X in der Interface Builder-Datei.

Es stürzt ab, weil angeblich Xcode meine benutzerdefinierten Klassen, die ich verlinkt habe, in meinem Storyboard nicht finden kann, aber es zeigt, dass sie in der Xcode-Benutzeroberfläche korrekt verknüpft sind.

Ich bin sicher, dass alles richtig verlinkt ist. Meine einzige andere Möglichkeit ist, die gesamte Storyboard-Datei zu löschen und von vorne zu beginnen, da sie irgendwie beschädigt sein kann.

Edit: Ich möchte auch hinzufügen, dass ich versucht habe, den Simulator zu säubern, mit Bauphasen zu experimentieren usw. Das funktioniert nicht.

552
Epic Byte

Ich habe dieses Problem gelöst, als ich die Frage eingab. Ich dachte mir, ich würde meine Frage beantworten und sie hier für alle anderen lassen, denen dieses Problem bei der Verwendung von Xcode 6 beta 4 begegnen könnte.

Um dieses Problem zu beheben, müssen Sie jedes Ihrer benutzerdefinierten Klassenobjekte in Storyboard auswählen (dazu gehören alle benutzerdefinierten Ansichten, sogar die benutzerdefinierten Ansichtscontroller selbst).

Öffnen Sie dann mit den ausgewählten Objekten den Identitätsinspektor, und unter "Benutzerdefinierte Klasse" sollte die Option "Modul" angezeigt werden. Klicken Sie in das Textfeld "Modul" und drücken Sie die Eingabetaste.

Das ist es! Das aktuelle Modul für alle meine benutzerdefinierten Objekte muss in Xcode 6 beta 4 irgendwie falsch eingestellt worden sein. Dies wurde jedoch im Inspector nicht visuell angezeigt.

Wenn Sie die Eingabetaste im Textfeld "Modul" nicht drücken, wählen Sie den Pfeil nach rechts und wählen Sie das aktuelle Modul manuell aus. Deaktivieren Sie das Textfeld und drücken Sie die Eingabetaste. Sie können auch versuchen, die Eingabetaste im Klassentextfeld zu drücken (obwohl dies normalerweise ein anderes Problem behebt).

Hier ist ein Bild, um die Dinge klarer zu machen: enter image description here

1350
Epic Byte

Manchmal fehlt XcodecustomModule="AppName" customModuleProvider="target" 

Um dies zu beheben, öffnen Sie das Storyboard als Quellcode und ersetzen diese Zeile:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

zu diesem:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
96
ChikabuZ

Ich hatte dieses Problem, nachdem ich eine Swift-Klasse umbenannt hatte. Gelöst mit der @objc-Direktive:

@objc(ForumTopicListViewController) class ForumTopicListViewController
68
user1760527

Das hat für mich funktioniert ..

Überprüfen Sie Ihre kompilierte Quelle, ob diese Datei (z. B. ViewController.m) hinzugefügt wurde oder nicht. In meinem Fall wurde die ViewController-Datei nicht hinzugefügt, sodass der Fehler angezeigt wurde.

enter image description here

53
mavericks

Dies kann in jedem Xcode über 6.0 passieren. Es ist mir passiert, nachdem ich einige ViewController-Klassen in einem Swift-Projekt umbenannt habe (aber ich denke, dass dies auch bei Obj-C der Fall ist). Sie müssen lediglich den Schnittstellenersteller öffnen, zum Identitätsinspektor von ViewController wechseln, dessen Klasse umbenannt wurde. Wählen Sie class aus und drücken Sie die Eingabetaste. Dadurch wird die umbenannte Klasse dem ausgewählten ViewController neu zugewiesen und auch der Modulwert zurückgesetzt, der nach dem Umbenennen der Klasse verloren geht.

Update für Xcode 8.1 (wahrscheinlich auch 8.0):

Xcode 8.1 stürzt einfach ab. Einfach und nervig stürzt einfach ab und druckt nichts. Ich habe diesen Phantomabsturz eine Stunde lang gejagt, nur um herauszufinden, dass es genau das gleiche war - eine nicht zugewiesene Klasse in IB. Wenn Sie Phantomabstürze erhalten, überprüfen Sie zuerst IB auf nicht zugewiesene Klassen.

43
jovanjovanovic

Projekt mit mehreren Zielen

In meinem Fall arbeite ich an Projekten mit mehreren Zielen, und das Problem war, dass "Ziel übernehmen" nicht aktiviert wurde. Die Auswahl von "Vom Ziel erben" hat mein Problem gelöst

 enter image description here

43
Muhammad Nayab

Manchmal verliert der von Ihnen bereitgestellte Controller seine Zielmitgliedschaft aus der aktuellen Anwendung. In diesem Fall wird durch Drücken der Eingabetaste im Feld "Modul" nichts unternommen. Gehen Sie zum Controller und stellen Sie sicher, dass die Zielmitgliedschaft auf die aktuelle App eingestellt ist.

31
Furqan Khan

Meine Antwort: setze das benutzerdefinierte Modul gleich dem benutzerdefinierten Pod-Namen (in meinem Beispiel - benutzerdefinierter Klassenname) wie auf dem beigefügten Screenshot

Diese Lösung ist für einen spezifischen Fall: für benutzerdefinierte views -Klassen aus Pod (oder Carthage) gedacht. 

Infrastruktur: XCode8, Swift3

 enter image description here

27
Tamara

Ich habe es korrigiert, indem ich genau das Gegenteil von dem tat, was ChikabuZ vorschlug (danke, dass Sie mich darauf hingewiesen haben). Suchen Sie in der Storyboard-Datei Folgendes:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

und ersetze es mit diesem:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

Ich kann nicht glauben, wie viele Stunden ich mit dem Swift-Compiler und Xcode 6 umgeht

15
Orlin Georgiev

Durch Auswahl der richtigen Module für meinen Custom Class habe ich dieses Problem gelöst. 

Hier ist es :

 enter image description here

13
roy

Ich habe dieses Problem in Xcode 8 angetreten, um es zu lösen, musste ich das Storyboard im Texteditor ändern.

Suchen Sie im Allgemeinen nach Ihrer Kontrolle und entfernen Sie customModule und customModuleProvider von der Kontrollentität.

Habe einen Trick für mich gemacht.

13

Prüfen Sie, ob Ihre Klasse Recht hat Zielmitgliedschaft.

9
Jakub Truhlář

Ich hatte das gleiche Problem.

In meinem Fall fügte Xcode meine benutzerdefinierte Klasse nicht hinzu: Target> Build Phase> Compile Sources.

Daher empfehle ich Ihnen zu überprüfen, ob Ihre CustomClass.m vorhanden ist.

 enter image description here

Ich hoffe das hilft dir.

9
rcmstark

Ich habe dieses Problem in Xcode 6.1 angetroffen, als ich Main.storyboard, die LaunchScreen.xib-Datei und die Standardklassen ViewController aus meinem Projekt entfernte.

Ich habe es behoben, indem ich die Einträge Launch Screen File und Main Interface aus Info.plist löschte.

9
Vinay Jain

Ich habe überall googelt. Keine der Antworten funktioniert für mich, bis ich einen Typen traf, der mich bat, meinen Projektordner auf den Desktop zu verschieben. Es hat einfach automatisch funktioniert. Anscheinend, wenn Sie Ihren Projektordner tief in vielen Ordnern haben, bricht XCODE tatsächlich ab. 

8
VBaarathi

Ich habe dieses Problem gelöst, indem ich meine Storyboard-Datei als Quellcode geöffnet und mit Befehl-F nach meiner unbekannten Klasse gesucht und die damit verknüpfte benutzerdefinierte Klasse gelöscht hat.

7
Wraithseeker

Diese Schritte arbeiten für mich. 

1) Abgeleitete Daten löschen.
2) Entfernen Sie die Dateien .h und .m 
3) Erstellen Sie erneut .h- und .m-Dateien

7
ARWIN

Meine Lösung (Xcode 8.1 Swift 3.0):

Unbekannte Klassexxxin der Interface Builder-Datei.

Öffnen Sie StoryBoard als Quellcode und suchen Sie nachxxx. Attribut entfernen, das den Wertxxxenthält. Bauen und ausführen.

6
ibrahimyilmaz

Ich habe dieses Problem gelöst, indem ich in der benutzerdefinierten Klasse des Identitätsinspektors für alle View-Controller und Ansichten den Namen des Moduls eingegeben habe (die Drop-Liste zeigt leider nichts ...).

Möglicherweise müssen Sie auch den Zielanbieter angeben. Um dieses Ziel zu erreichen, können Sie das Storyboard im Quellcodemodus öffnen und das Attribut "customModuleProvider" sowohl in den ViewController- als auch in den View-Winkel-Klammern hinzufügen. 

6
Teng Long

Was @gfrs sagte, ist richtig, Sie müssen das Modul einstellen. Ich hatte jedoch einmal ein Problem, dass meine Klasse nicht in der Dropdown-Liste Class aufgeführt war. Schließlich entfernte ich die Swift-Datei, startete Xcode neu und erstellte die Datei neu. Schließlich wurde die Klasse aufgelistet und konnte im Storyboard verwendet werden.

Werfen Sie einen Blick auf diese Antwort , die das "echte" Problem zu lösen scheint.

6
bouke

In meinem Fall habe ich in den Projekteinstellungen ein Flag -ObjC zu Other Linker Flags hinzugefügt, damit es funktioniert. Ich habe es auch mit -all_load Flagge versucht und es hat auch gut funktioniert.

 enter image description here

In meinem Fall hatte die Klasse , auf die im Storyboard/Xib verwiesen wird, keine Zielmitgliedschaft festgelegt.

Um dies zu beheben, geben Sie den .h- und .m-Dateien dieser Klasse dieselbe Zielmitgliedschaft wie Ihre anderen Klassen.

No target membership set.

3
pkamb

Für die Aktivierung von Inherit Module From Target wurde das richtige Zielmodul verwendet. Das hat das Problem gelöst.

 enter image description here

3
Arnab Hore

Ich hatte das Problem, als ich das Storyboard vom Swift-Projekt in das Objective-c-Projekt portierte, und bemerkte vvkuznetsovs Antwort . I "Produkt -> Bereinigen" und tippen Sie im Textfeld "Modul und Klasse" auf die Eingabetaste. das Problem ging weg. 

2
xhg

Ich habe dies entsprechend den Vorschlägen von Laura korrigiert, aber ich musste die Dateien nicht neu erstellen.

Wählen Sie mit XCode 4 im Project Navigator die .m-Datei aus, die die Klasse enthält, über die sie sich beschwert

Gehen Sie zu Ansicht-> Dienstprogramme-> Dateiinspektor anzeigen (Der Dateiinspektor wird rechts mit dieser .m-Datei angezeigt.)

Öffnen Sie den Abschnitt Zielmitgliedschaft und stellen Sie sicher, dass Ihr Ziel für diese .m-Datei ausgewählt ist

Wenn ich meine .m-Datei zu meinem Projekt hinzufügte, wurde sie aus irgendeinem Grund nicht zu meinem Standardziel hinzugefügt, und ich bekam den von Ihnen genannten Fehler.

2

Meine Lösung bestand darin, @objc aus der benutzerdefinierten Klassendefinition zu entfernen.

2
danidarko

Mein Problem war ein Benutzerfehler. Ich hatte eine generische UIView in meinem Storyboard und in der Custom Class-Sektion des Identity Inspector hatte ich versehentlich den Namen von UIView in Kauderwelsch geändert.

Alles, was zur Behebung des Problems nötig war, war, es wieder in UIView zu ändern.

1
Scooter

Die Lösung war für mich anders. Sie müssen die .m der Klasse den kompilierten Quellen des Ziels in der Erstellungsphase hinzufügen. 

Hoffe das hilft!

1
Ruud Visser

Ich hatte dieses Problem, nachdem ich ein neues Ziel hinzugefügt und dann eine neue Klasse mit dem Dialogfeld "Neue Datei" erstellt hatte. Das neue Ziel sowie das ursprüngliche Ziel im Erstellungsdialogfeld konnten jedoch nicht versehentlich überprüft werden, sodass das Objekt nur meinem hinzugefügt wurde ursprüngliches Ziel. Die Lösung bestand darin, die Quelldateien zu löschen (nur Referenz entfernen) und sie dann mit 'Dateien hinzufügen' wieder hinzuzufügen. Diesmal wurden beide Ziele überprüft. 

1
JulianSymes

Was für mich nur funktioniert hat, ist das Hinzufügen des Modulnamens zur Xib-Datei ... 

Sooo, die Xib-Dateien sehen so aus:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

HORRIBLE-Lösung meiner Meinung nach, aber so will Apple uns jetzt machen. 

Diese Frage zeigt 3 mögliche Umgehungsmöglichkeiten in der Betaversion 4 ... Anscheinend war Apple in dieser Situation offenbar nicht sehr hilfreich, da einige es als "Funktionieren wie beabsichtigt" bezeichnen. 

1

Ich hatte das gleiche Problem mit Xcode Version 6.1 (6A1052d). Ich denke, das Problem tritt auf, wenn Sie Ihr App/Xcode-Projekt umbenannt haben.

Meine Lösung bestand darin, den Modulnamen manuell im Interface Builder hinzuzufügen.

1
patrickS

Wählen Sie Ihre unbekannte Klassendatei aus, öffnen Sie den Dateiinspektor, und überprüfen Sie Ihren Zielnamen in Target Membership. Da gehst du hin.

1
Nix Wang

Swift 3 Lösung.

All das hat NICHT funktioniert.

  1. Das Klicken auf Module im rechten Fensterbereich hat NICHT funktioniert.
  2. Das Hinzufügen von @obj hat NICHT funktioniert.
  3. Neustart hat NICHT funktioniert.
  4. Das Wechseln zum Desktop als Xcode-Unterbrechungen für einen längeren Pfad funktioniert NICHT.

Das hat endlich funktioniert.

Einfach neues Verzeichnis erstellen und ein neues Projekt anlegen darin. Fügen Sie die Dateien mit Ausnahme von Main.sotryboard hinzu.

Kopieren Sie nun die View-Controller aus dem vorherigen Projekt und fügen Sie sie in das neue Main.storyboard ein.

Voila! Das funktioniert.

0
mythicalcoder

Mein Problem bezog sich auf ein Podfile-Framework (speziell "BWWalkthrough"). Keine der oben genannten Lösungen funktionierte für mich, und egal wie ich es versuchte, ich konnte das Modul nicht dazu bringen, auf meine App zu verweisen.

Was am Ende für mich gearbeitet hat, war das Entfernen der Bibliothek als Pod-Datei und das direkte Hinzufügen zu meinem Projekt als statische Bibliothek. Danach war alles sehr gut für mich. Nicht ganz sicher, was mit der Pod-Implementierung der Klasse "gebrochen" wurde.

0
Simon

Ich bin ein PyObjC-Benutzer und hatte meine NSView-Unterklasse in einer eigenen Datei. Dieses Problem wurde für mich gelöst, indem die Unterklasse NSView aus ihrer eigenen Datei in meine AppController.py-Datei verschoben wurde. Dies ist die Datei, in der sich der Anwendungscontroller befindet.

0
user1766438

Ich hatte das gleiche Problem, aber nicht den gleichen Fix.

Der Projektordner war irgendwie beschädigt. Ich musste meinen Projektordner in einen anderen Ordner kopieren, z. B. auf den Desktop, und danach das Projekt öffnen.

Wenn es geöffnet wird, gehen Sie zu Ihrem Interface Builder-Projekt und Sie werden sehen, dass er Ihr Skript erkennt. Dann klicken Sie in der Tat auf den Namen Ihres Skripts und drücken Sie die Eingabetaste.

Und es wird wie ein Zauber wirken! : D

0
Jippe Joosten

Für mich verwende ich Xcode7 + Swift2

Dieses Problem wurde durch Überprüfen meines Codes gelöst. Ich habe diese Zeile in meinem viewController:

 self?.navigationController?.pushViewController(vc, animated: true)

Dann wurde mir klar, dass der navigationController nicht mit der Detailseite verbunden ist. Wenn Sie also einen neuen ViewController mit angepasster ID verwenden, sollten Sie dies besser überprüfen.

0
Chong Guo

Ich hatte ein Problem, als ich ein Projekt mit demselben Namen erstellt hatte, das bereits in meinem Projektverzeichnis vorhanden war (obwohl es vor einiger Zeit gelöscht wurde). Ich habe meine Lösung dort geschrieben https://stackoverflow.com/a/27763697/1654692

0
vvkuznetsov

Das funktionierte für mich, wenn nichts sonst tat. Aus dem Projektverzeichnis im Terminal:

[~/Developer/MyProject] grep -rn ViewController * | grep -i xib 

Öffnen Sie die abgeglichenen Dateien als Quellcode in Xcode und ändern Sie alle Instanzen von ViewController in das, was Sie tatsächlich benötigen. In meinem Fall war Main.storyboard die Datei, die ich als Quelle öffnen musste, und ich habe Instanzen von ViewController in DetailViewController geändert.

Ich habe zwei Dateien aus Xcode und main.storyboard gelöscht, was meiner Meinung nach dieses Problem für mich verursacht hat.

0
N R

Es ist mir passiert, weil meine Klasse mit @objc markiert war und das Modul im Storyboard nicht gefunden wurde. Durch das Entfernen von @objc wurde das Problem behoben

0
aryaxt

Ich hatte das gleiche Problem mit Xcode 6.3, wenn ich "myapp" Dateien hinzufügte. Option.Und das Problem behoben.

0
wj2061

Dies ist wirklich merkwürdig, wenn XCode 10 angehalten wurde, um Debugs zu verfeinern.
In meinem Fall habe ich UITableViewDelegate und UITableViewDataSource mit Storyboard vereinbart und vergessen, diese erforderlichen Methoden zu implementieren.
Ich wollte nur die Ansicht testen, bevor diese Methoden implementiert wurden, und dann abstürzen! XCode 9, warnt vor diesen Methoden, aber XCode 10 hat meinen Code wirklich langsam gemacht, nicht bei diesem, bei anderen war ich durch diesen "Fehler-Zweifel".
Hoffe das hilft jemandem.
Vielen Dank

in meinem Fall richte ich die App als Universal-App ein. Xcode erstellt also zwei Storyboards. Ich habe jedoch nur iPhone-Storyboard (entworfen). und versuchen, die App auf dem iPad auszuführen. Zur Lösung des Problems müssen Sie nur die App als nur für das iPhone erstellen und funktioniert hervorragend. 

0
bLacK hoLE

Für mich bestand das Problem darin, dass ich im Storyboard eine benutzerdefinierte Klasse referenzierte (die mit einer .h-Datei übereinstimmte), aber in der .m-Datei kein @ Implementierungsbefehl vorhanden war. 

0
theDuncs

Bei mir geschah es, weil mein Projekt mit "ä, ü, ö" aufgerufen wurde

0
SwiftNewling

Verwenden Sie keine Leerzeichen im Projektnamen, anderenfalls findet die benutzerdefinierte Klasse keine eigenen Klassen.

0
bob woodwind

Ich habe mit Spring Spring gespielt. Und dieser Fehler ist mir passiert, weil ich Ordner als Referenz verwendet habe, wenn ich die gesamte Ordnerklasse in ein Projekt verschieben wollte, anstatt Gruppen zu erstellen. Das war also meine Lösung, Ordner nicht als Referenz verwenden, sondern Gruppen erstellen.

0

Ich hatte ein Problem mit Xcode 6, als ich die bereits enthaltenen ViewController.h- und ViewController.m-Dateien aus meinem neuen View-basierten Projekt löschte und die Szene, die zu dieser Klasse gehörte, aus dem Storyboard löschte. Xcode kassiert diese Dateien im abgeleiteten Datenordner Wenn Sie also versuchen, zu Fenster -> Projekte -> Ihr_Projekt zu gehen und die abgeleiteten Daten zu löschen, ist alles in Ordnung.

0
JAHelia

In meinem Fall lag das Problem daran, dass unser Haupt-Storyboard als Startbildschirm festgelegt wurde. Beim Start der App wurde für jeden benutzerdefinierten Ansichts-Controller, der im Storyboard referenziert wird, ein Konsolenfehler (kein Absturz) angezeigt.

Wir hatten uns mit XIBs befasst und Bilder auf Storyboards veröffentlicht, und ich war noch nicht dazu gekommen, den Startbildschirm wieder zum Laufen zu bringen. Als ich endlich mit dem Erstellen eines nackten Knochens anfing, Storyboard ohne benutzerdefinierte Ansichts-Controller (die nicht zulässig sind) zu starten, wurden diese Konsolenfehler nicht mehr angezeigt.

0
Eric McNeill

Im mij-Fall befand sich der ViewController.h/m in einer lib. Die Projekte werden immer noch erstellt, aber seit Xcode 6.3 wurde der obige Fehler zur Laufzeit angezeigt. Durch das Zurücklegen beider Dateien in das Projekt wurde das Problem behoben.

0
OnTwoWheels