"Es konnten keine Informationen für die Klasse ViewController gefunden werden."

154

Dieser Fehler hat mich verrückt gemacht, seit ich Xcode (4.6.3) benutze. Immer wenn ich versuche, ein Storyboard-Element mit meinem Code zu verknüpfen, wird folgende Fehlermeldung angezeigt:

Es konnten keine Informationen für die Klasse ViewController gefunden werden.

Dies geschieht auch bei benutzerdefinierten Klassen. Ich habe Methoden ausprobiert wie:

  • Delegatendaten löschen.
  • Entfernen und erneutes Hinzufügen der Klassen.
  • Xcode neu starten.
  • Xcode neu installieren.

Ich kann in keinem meiner Projekte bei gedrückter Strg-Taste Verbindungen herstellen, unabhängig von der Klasse. Das gleiche Problem tritt bei einer brandneuen Vorlagenanwendung auf. Wenn ich den Code manuell eingebe und dann bei gedrückter Strg-Taste ziehe, kann ich eine funktionierende Verbindung herstellen, diese jedoch nicht automatisch hinzufügen. Nichts, was ich bisher im Internet finden konnte, hat geholfen. Irgendwelche Hinweise?

user2597451
quelle
Sind Sie dreifach sicher, dass die ViewController .m-Datei im richtigen Ziel enthalten ist? (Kontrollkästchen im rechten Inspektorfeld)
Alfie Hanssen
2
Sie haben einen Ansichts-Controller in Ihrem Storyboard und "ViewController" als Namen der Klasse angegeben, die zum Verwalten der Ansicht instanziiert werden soll. Überprüfen Sie jeden Ansichts-Controller im Storyboard: Wählen Sie den Ansichts-Controller aus, sehen Sie sich den "Identitätsinspektor" im rechten Bereich an und sehen Sie sich die Eigenschaft "Benutzerdefinierte Klasse" an. Wenn "ViewController" angezeigt wird, liegt ein Problem vor. Geben Sie den Namen der Klasse ein, die Ihren View Controller verwalten soll ... oder geben Sie UIViewController ein, um die Standard-UIKit-Implementierung zu erhalten.
Nicholas Hart
1
Ich habe die benutzerdefinierte Klasse im Identitätsinspektor in "UIViewController" geändert und konnte sie nicht mehr mit gedrückter Strg-Taste aus dem Storyboard in ViewController.h ziehen. Wenn ich eine neue Klasse erstelle und versuche, sie bei gedrückter Strg-Taste hineinzuziehen (nachdem ich die Klasse des View Controllers entsprechend festgelegt habe), wird der gleiche Fehler "Keine Informationen gefunden" angezeigt.
user2597451
4
Ich hatte dieses Problem und das Ändern der automatisch generierten ViewController-Klasse funktionierte für mich. ZB einfach ein NSLog()toviewDidLoad:
jb

Antworten:

292

Was dieses Problem für mich gelöst hat, war das Löschen der Klasse aus dem Projekt.

Schritte:

  1. Suchen Sie im Projektdateiexplorer (linkes Feld) die Klasse und klicken Sie mit der rechten Maustaste -> Löschen
  2. Referenz entfernen (nicht in den Papierkorb verschieben, da Sie die Klasse endgültig verlieren)
  3. Klicken Sie mit der rechten Maustaste auf den Ordner, der die Klasse enthielt -> Dateien hinzufügen zu ...
  4. Suchen Sie die gerade gelöschte Klasse im Dateisystem

Dies scheint Xcode zu zwingen, die Klasse wieder mit dem Storyboard zu verknüpfen.

Hinweis: Bei mir hat folgendes nicht funktioniert:

  • Xcode schließen
  • Projekt reinigen
  • Löschen Sie den Klassennamen aus dem Storyboard und geben Sie ihn erneut ein

Ich denke, das ist ein Fehler von Apple

Chris Harrison
quelle
8
Ich habe es versucht, aber es hat bei mir nicht funktioniert / -: gleicher Fehler.
Michael
1
@ Michael, ja, jetzt bin ich in einer Situation, in der keines der oben genannten überhaupt funktioniert. Xcode ist ein ***
Chris Harrison
5
Dieses Problem stammt aus dem Juli 2013, ab heute Mai 2016 habe ich den gleichen Fehler und habe ihn mit dieser Antwort behoben. Wie kommt es, dass Apple es in so vielen Jahren nicht endgültig repariert?
SkyWalker
3
Ich kann nicht glauben, dass dies immer noch ein Problem ist.
Fisk
2
2017 (Version 8.2 (8C38)) und noch am Leben, Xcode SAUGT. Es passiert mir, wenn Sie UI-Mitarbeiter aus dem Storyboard von einer Szene in eine andere kopieren und einfügen
Jaime Agudo
135

Falls jemand immer noch frustriert ist, gibt es einen Trick, um die Dinge zum Laufen zu bringen.

Ich gebe manuell einen Ausgang in meine Klasse ein, zum Beispiel: @IBOutlet weak var someView: UIView!und ziehe aus dem Code in die Ansicht in IB oder Storyboard. Danach kann ich von IB / Storyboard in meine Klasse ziehen, um Verbindungen herzustellen. Redaktionsassistenten erkennen die Klasse in "Automatisch" usw.

Funktioniert jedes Mal.

Andrew Robinson
quelle
6
@ Gmeister4, wenn Sie eine Steckdose in Ihrem Code erstellen, wird links von der Steckdose ein kleiner Kreis angezeigt. Klicken und ziehen Sie von diesem Kreis in die Ansicht in IB oder Storyboard, um Ihre Verbindung herzustellen.
Andrew Robinson
4
Einfacher als die Top-Antwort. +1
cph2117
2
Dennoch kann es die richtige Art und Weise nicht um, auch nicht danach - aber zumindest diese Werke!
Alexandre G
1
Keine der oben genannten Antworten hat bei mir funktioniert. Nur diese Antwort hat bei mir funktioniert.
coolcool1994
1
Super, das war's!
Sam
38

Für mich war es der Trick, sie aus Ihrer Zielmitgliedschaft in der rechten Spalte zu entfernen und erneut hinzuzufügen Geben Sie hier die Bildbeschreibung ein

Ruud Visser
quelle
Das hat auch bei mir funktioniert. Ich hatte die ViewController.swift-Klasse dupliziert, und dies scheint die Lösung zu sein.
UberJames
Ich denke, es ist ein Fehler von Xcode, der noch in Xcode 8.0 existiert
jiangjiefs
Dies ist mir gerade in Xcode 8.3.3 passiert und Ihre Lösung ist die einfachste und funktioniert. Also vielen Dank!!!
RoberRM
Gibt es noch in Xcode 11.5 (ich meine ernsthaft Apple ??). Hier ist nur die Lösung aufgeführt, die für mich funktioniert hat.
Christophe Fondacci
12

Manchmal funktioniert Xcode, weil VC nicht auf die Klassendatei verweist. Die einfache Lösung hierfür ist:

Schreiben Sie die Eigenschaft manuell wie angegeben.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Dadurch wird vor @IBOutlet ein leeres Linkzeichen erstellt . Öffnen Sie Ihr Projekt im Assistenten-Editor, klicken Geben Sie hier die Bildbeschreibung einSie auf das Linkzeichen und ziehen Sie es in die Ansicht, die Sie verbinden möchten (ich habe eine Verbindung mit TableView hergestellt). und das ist es. Viel Spaß beim Codieren !!!

MRizwan33
quelle
8

Ich hatte gerade dieses Problem im April 2017 mit Xcode 8

Einfach eine Steckdose durch Code erstellen und kompilieren behoben. z.B:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Du musst Xcode lieben ...

Bearbeiten: Immer noch auf Xcode 9

Jesus Rodriguez
quelle
7

Die folgenden Schritte funktionieren für mich hoffentlich auch für Sie

1- Sie müssen Ihr Projekt nach dem Schließen von Xcode erneut öffnen.

2- Warten Sie auf die Indizierung der Projektdateien

3- Überprüfen Sie, ob es funktioniert oder nicht

4- Wenn immer noch nicht funktioniert, folge Schritt 5, wenn du nicht glücklich für dich bist :)

5- Bereinigen und erstellen Sie Ihr Projektziel

Geben Sie hier die Bildbeschreibung ein

Amr wütend
quelle
7

Ich habe alles versucht und es hat nicht funktioniert, also hat es für mich funktioniert:

  • Bereinigen Sie den Build-Ordner und das Projekt.
  • Projekte öffnen (Fenster -> Projekte)
  • Suchen Sie Ihr Projekt in der Liste und löschen Sie die abgeleiteten Daten
  • Schließen Sie Xcode
  • Starten Sie den Computer neu (ohne geöffnete Fenster erneut zu öffnen).
  • Führen Sie Xcode aus
  • Arbeit!

Alle meine View Controller wurden nicht erkannt, daher war das Löschen aller Dateien und das erneute Hinzufügen keine Option, da dies ein großes Projekt ist.

gmogames
quelle
4

Für mich hat folgendes funktioniert:

  1. Führen Sie einen "sauberen" und einen "sauberen Build-Ordner" aus (drücken Sie im Menü "Produkt" auf "Option", um den Befehl "Clean Build-Ordner" abzurufen

  2. Stoppen Sie Xcode

  3. Wechseln Sie im Terminal zum abgeleiteten Datenordner:

    (/ Benutzer // Bibliothek / Entwickler / Xcode / DerivedData)

Löschen Sie das abgeleitete Datenverzeichnis für Ihr Projekt.

  1. Winken Sie totes Huhn in die Luft

  2. Starten Sie Xcode

Joe149
quelle
3

Bisher musste ich einige der Antworten kombinieren:

  1. Entfernen Sie den benutzerdefinierten Klassennamen aus dem Storyboard.

(Klicken Sie im Storyboard oben links im View Controller auf die gelbe Schaltfläche -> Gehen Sie zum Identitätsinspektor (Option + Befehl + 3) -> Löschen Sie den benutzerdefinierten Klassennamen oben.)

  1. Entfernen Sie den Verweis auf die View Controller-Datei.

(Klicken Sie mit der rechten Maustaste auf die Datei -> Löschen -> Referenz entfernen)

  1. Fügen Sie die View Controller-Datei wieder zum Projekt hinzu.

(Klicken Sie mit der rechten Maustaste auf den Ordner, in dem sich die Datei befand -> "Datei zu [Projekt] hinzufügen")

  1. Fügen Sie den benutzerdefinierten Klassennamen wieder zum Storyboard hinzu.
yndolok
quelle
3

Wenn die Leute das oben genannte versuchen und die Dinge immer noch nicht funktionieren, war der seltsame Trick, der für mich funktioniert hat, das Hinzufügen der Steckdose in einem Stück Leerzeichen. Es funktioniert, wenn sich keine anderen Zeilen direkt über oder unter der hinzuzufügenden Zeile befinden. Seltsam, aber es hat funktioniert!

Elliot KG
quelle
3

Was für mich funktionierte, war, anstatt die Verbindung von der Schaltfläche zum Code zu ziehen, Folgendes:

  1. Klicken Sie auf das gewünschte Storyboard-Element.
  2. Öffnen des Verbindungsinspektors (rechte Tafel)
  3. Ziehen aus dem + Kreis in den Codebereich. Wie so:

Nachdem ich meinen Code auf diese Weise verknüpft hatte, funktionierte er danach normal.

Hayden Crabb
quelle
3

Bleib fokussiert!

Ich fügte eine neue Klasse mit einem Xib hinzu und fing an, dieses Problem zu sehen. Ich verbrachte eine gute Zeit damit, die Antworten hier durchzusehen und zu sehen, ob irgendetwas davon einen Unterschied machte.

Zufällig habe ich mehrere Ziele in meinem Arbeitsbereich und muss oft zwischen ihnen wechseln.

Es stellt sich heraus, dass das Hinzufügen neuer Dateien eine Neuindizierung in Xcode auslöst. Wenn Sie jedoch auf das falsche Ziel zeigen, ist die Indizierung wahrscheinlich bedeutungslos und während des Ziehens zum Verbinden von Xcode kann Ihre Klasse nicht gefunden werden.

Zusamenfassend

Schritt 1.

Zielauswahl

Stellen Sie sicher, dass Sie das richtige Ziel festgelegt haben, damit die Indizierung sinnvoll ist.

Damo
quelle
3

Das hat bei mir funktioniert:

  1. Führen Sie ' Build-Ordner bereinigen ' aus
    (halten Sie die Optionstaste gedrückt und gehen Sie zu " Produkt " Menü ", um darauf zuzugreifen.
  2. Führen Sie eine einfache "Reinigung" (CMD-SHIFT-K) aus dem " Produkt " durch Menü " .
  3. Erstellen Sie das Projekt, damit Xcode die Dateien kompilieren kann. Lassen Sie es bei Bedarf auch Dateien indizieren.

Nebenbei bemerkt, ich bin mir nicht sicher, ob dies geholfen hat, aber ich habe auch die abgeleiteten Daten gelöscht, bevor ich die obigen Schritte ausgeführt habe (Xcode-Einstellungen> Standorte).

Programmierer
quelle
2

Wählen Sie den ViewController in storyBoard aus, löschen Sie den aktuellen Wert im rechten Bereich / " Kundenklasse " / "Klasse" und fügen Sie die Steuerungsklasse erneut hinzu (Typ: "SampleViewController" ...), und geben Sie ein. -> Das funktioniert bei mir

Wolfram
quelle
2

Ich habe alle diese Antworten ausprobiert. Das Problem bestand darin, dass Xcode die Dateien nicht indizieren konnte. Ich habe dies behoben, indem ich einfach Xcode beendet und das Projekt erneut geöffnet habe. Natürlich habe ich das getan, nachdem ich alle oben genannten Lösungen ausprobiert hatte: p

JohnVanDijk
quelle
2

Produkt> Reinigen (Befehl - Umschalt - K) hat es für mich behoben!

Jangles
quelle
2

Dies ist der EINFACHSTE Schritt, den ich unternommen habe, um dieses Problem zu beheben.

  1. Ich putze das Projekt
  2. Ziehen Sie eine neue Schaltfläche in den Ansichts-Controller.
  3. Erstellen Sie das Projekt.
  4. Verbinden Sie die neu gezogene Schaltfläche mit der Klasse (entweder Steckdose oder Aktion).
  5. Dann voila !!! Andere Steckdosen können jetzt wieder an die Klasse angeschlossen werden!
user2480567
quelle
1

Wenn Sie nach meiner Testerfahrung eine im Xcode verknüpfte Klasse löschen und dann erneut eine Datei hinzufügen, tritt dieses Problem auf.

inix
quelle
1

Wenn mir das passiert, habe ich den Code für die Klasse normalerweise noch nicht gespeichert. Hüpfen Sie einfach zum Code und drücken Sie cmd + s, um das Problem häufig richtig zu beheben.

Trennzeichen
quelle
1

Sie müssen nur das Projekt bereinigen und neu erstellen.

Carolina Aguilar
quelle
1

Keiner der oben genannten Schritte hat bei mir funktioniert, aber ich glaube, ich habe das Problem entdeckt. Zumindest hat es bei mir funktioniert, und es ist kein Fehler in Xcode.

Sehen Sie sich im Assistenten-Editor oben im Fenster den Code für Ihren viewController an. Die dritte Option von rechts sagt wahrscheinlich "Manuell", sollte aber "Automatisch" sagen. Nachdem ich dies geändert hatte, wurde das Problem behoben!

John Nolan
quelle
1

Ich bekam ein ähnliches Problem: "Ich konnte keine Klasse mit dem Namen ... finden" und die Ursache war meinerseits dumm, als ich es herausgefunden hatte. Stellen Sie sicher, dass Sie nicht vom Element auf die Benutzeroberfläche ziehen - stellen Sie sicher, dass es in die Klasse selbst gezogen wird

Will Buffington
quelle
1

Ich habe ALLES versucht!

Stellen Sie sicher, dass der Klassenname Ihres UIViewControllers nicht das Wort "Test" enthält.

Fehlerbericht eingereicht.

Aaron Kreipe
quelle
Auf keinen Fall sagen, dass dies die einzige Ursache ist. Nur dass dies eine andere Sache ist, die man beachten muss.
Aaron Kreipe
Hilfe für mich alle abgeleiteten Daten löschen, Projekt bereinigen. Aber das ist ein Fehler und Sie haben Recht.
Genevios
0

Ich würde versuchen, die fraglichen .m- und .h-Dateien neu zu erstellen und ihnen einen ursprünglichen Namen zu geben, der nicht generisch wie "ViewController" ist. Versuchen Sie etwas mehr in der Art und Weise, wie diese Datei ausgeführt werden soll, und enden Sie in View Controller (dh "PizzaDecoraterViewController").

Wählen Sie dann den ViewController aus, mit dem Sie eine Verbindung zu diesen Dateien herstellen möchten. Stellen Sie sicher, dass Sie den ViewController auswählen, nicht nur ein Objekt darin. Klicken Sie auf den schwarzen Balken unten (der mit den Symbolen "Ersthelfer" und "Beenden" versehen ist). Der gesamte ViewController sollte blau umrandet sein. Gehen Sie dann im Identitätsinspektor zum Abschnitt Benutzerdefinierte Klasse, und im ersten Feld sollte ein abgeblendeter "UIViewController" angezeigt werden. Geben Sie in dieses Feld den Namen der .h- oder .m-Datei ein, zu der eine Verbindung hergestellt werden soll (geben Sie PizzaDecorator ein ... und es sollte eine kleine automatische Vervollständigung durchgeführt werden). Drücken Sie dann die EINGABETASTE.

Stellen Sie beim Öffnen des Assistenten-Editors sicher, dass die Datei, in die Sie ziehen und ablegen möchten, tatsächlich die richtige Datei ist.

Wenn Sie alles wie oben beschrieben getan haben, sollte es funktionieren.

CaptJak
quelle
Funktioniert leider immer noch nicht. Ich habe versucht, dies vorher ohne Erfolg zu tun. Hier ist ein Screenshot: i.imgur.com/5ixtcps.png
user2597451
Huh. Seltsam. Versuchen Sie, sie programmgesteuert hinzuzufügen (z. B. @property (nichtatomar, stark) IBOutlet UIView * -Test;). Wenn der kleine Kreis daneben angezeigt wird, ziehen Sie ihn per Drag & Drop in Ihre UIView.
CaptJak
Das funktioniert und hat es immer getan (und die Apps scheinen in Ordnung zu sein), aber ich versuche das Problem zu lösen, das nicht automatisch hinzugefügt wird.
user2597451
Wenn es so funktioniert, sollte es auch andersherum funktionieren. Fehler in Ihrem XCode? Versuchen Sie, eine frühere Version (wie 4.6.2 oder so) zu erhalten und diese zu installieren. Ansonsten ummmmmmmmmmmmmmm ...... yeah ....
CaptJak
Ja, davor habe ich Angst. Das Deinstallieren und Neuinstallieren hat nicht funktioniert. Ich hatte gehofft, dass ich einen Fehler gemacht habe. Was ist der beste Weg, um meine Xcode-Kopie herunterzustufen?
user2597451
0

Als ich die Antwort von @ ChrisHarrison kommentierte, funktionierten diese Dinge für mich nicht, aber das Löschen der abgeleiteten Daten wie in Ich brachte es zum Laufen, indem ich die abgeleiteten Daten wie in https://stackoverflow.com/a/16182672/1449799 löschte

Michael
quelle
0

Löschen Sie die Dateien (nur die Referenzen) und fügen Sie die Dateien erneut hinzu.

Jomafer
quelle
0

Nun, in meinem Fall hat Folgendes funktioniert (es ist ein bisschen komisch, aber es hat funktioniert):

Versuchen Sie, eine Datenquelle hinzuzufügen (z. B. eine Erweiterung des ViewControllers wie eine UITableViewDataSource). Xcode versucht, den ViewController neu zu laden. Dann schrieb ich eine Methode des Protokolls (am Anfang vervollständigte Xcode die Methoden nicht automatisch, sondern schrieb sie manuell aus), fügte dann die IBOutlets hinzu und entfernte schließlich die Datenquelle.

Beispiel:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}
José Roberto Abreu
quelle
0

Für mich konnte die Ansicht, für die ich eine benutzerdefinierte Klasse angegeben hatte, vom Interface Builder nicht kompiliert werden. Es wurde markiert@IBDesignable .

Entfernen @IBDesignableund dann Hinzufügen meiner Steckdosen und Markieren als dann @IBDesignablebehoben, um das Problem in meinem Fall zu beheben.

Nick DiZazzo
quelle
0

Versuchen Sie einfach, abgeleitete Daten für das Projekt zu löschen

david.gol
quelle
0

versuchen Sie es einfach

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
Yousuke
quelle