Ich habe meinem Projekt eine neue NIB-Datei hinzugefügt und versucht, sie zu laden.
Wenn ich jedoch auf das Symbolleistensymbol klicke, das mich zu der von mir erstellten Ansicht führen soll, wird folgende NSInternalInconsistencyException
Meldung angezeigt:
Beenden der App aufgrund der nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: '- [UIViewController _loadViewFromNibNamed: bundle:] hat die Schreibfeder "..." geladen, aber der Ansichtsausgang wurde nicht festgelegt.'
Also habe ich meine NIB-Datei geöffnet und sehe für die Ansicht, dass keine Referenzierungs-Outlets festgelegt sind. Ich versuche jedoch, auf den Kreis für "New Referencing Outlet" zu klicken und ihn auf den Eigentümer der Datei zu ziehen, aber ich kann nicht ... was muss ich tun, damit meine Ansicht angezeigt wird?
Antworten:
Ihr habt Recht, aber da ich ein Neuling bin, habe ich eine Weile gebraucht, um alle Schritte herauszufinden, um das zu tun. Folgendes hat bei mir funktioniert:
quelle
MyViewController
ist eine Unterklasse von Unterklasse vonUIViewController
und es gibt keineview
unter "Outlets". Wenn ichMyViewController
direkt ausUIViewController
der Ansicht eine Unterklasse habe, erscheint unter "Outlets". Magie oder Fehler von Xcode.Dies ist der Vorschlag von Josh Justice, aber auf grafische Weise (Bilder sind meine):
Schließlich wird der View Controller mit dem fortlaufenden Code instanziiert:
quelle
Ich kann das Problem im Allgemeinen beheben, indem ich die Verbindung zwischen dem Eigentümer der Datei und der Ansicht wieder herstelle. Ziehen Sie bei gedrückter Ctrl-Taste vom Eigentümer der Datei in Ihre Ansicht (in IB) und wählen Sie die Ansicht aus dem Einblendmenü aus.
quelle
Die Ansicht Identität - Klassenidentität wurde nicht festgelegt. Nachdem Sie die entsprechende Klasse festgelegt hatten, wurde das Problem behoben.
quelle
Sind Sie sicher, dass der Eigenschaft "view" Ihres ViewControllers eine UIView (oder Unterklasse) zugewiesen ist?
Klicken Sie mit der rechten Maustaste auf "Dateibesitzer" im linken Bereich der xib für Ihren ViewController und überprüfen Sie, ob der Ausgang "Ansicht" eingestellt ist. Wenn nicht, setzen Sie es auf eine Ansicht!
Dadurch wird das Problem definitiv behoben
quelle
Für mich all die hier genannten Dinge https://stackoverflow.com/a/6395750/939501 wahr, aber es wurde immer noch ein Fehler ausgelöst. Grund dafür war, dass ich eine View-Klasse mit dem Namen ABCView erstellt und sie später gelöscht und einen View-Controller als hinzugefügt habe ABCViewController, also bezog es sich irgendwie auf altes ABCView im neuen View Controller. Ich musste den ABCViewController löschen und einen neuen mit einem anderen Namen hinzufügen, der mein Problem löste.
Vielen Dank
quelle
Ich hatte das gleiche Problem mit XCode 4.6.3. Ich hatte mit ein paar Dateien begonnen, die benannt
MySettingsView.h
und.m
aber zugunsten von gelöscht wurdenMySettingsViewController.h
, aber obwohl ich die meisten der hier erwähnten Hinweise ausprobiert hatte, machte ich immer noch Fehler mit:Es war offensichtlich immer noch "verwirrt" und versuchte, MySettingsView.xib anstelle von MySettingsView Controller zu laden .xib . Vielleicht ist die Logik "Mach was ich meine" zu ausgefallen.
Also habe ich das Problem umgangen, indem ich den NIB / XIB-Namen in MySettingsViewController.m fest codiert habe:
quelle
Wenn Sie eine xib-Methode zum Erstellen einer UIView verwenden und dieses Problem haben, werden Sie feststellen, dass im Menü "Verbindungsinspektor" keine "Ansicht" angezeigt wird. Wenn Sie jedoch die benutzerdefinierte Klasse "File's Owners" auf einen UIViewController festlegen, wird der Ausgang "view" angezeigt, über den Sie einfach einen Ausgang mit CustomView verbinden können.
quelle
Mein Problem dabei wurde dadurch verursacht, dass sich im Klassenordner eine doppelte Schreibfeder befand, für die die Ansicht nicht festgelegt war. xcode schien eine Feder für einen Build auszuwählen und dann die andere, wenn ich das nächste Mal das Projekt baute. Habe gerade den anderen gelöscht. Sieht gut aus. Doh!
quelle
Ich habe gerade mehr als eine Stunde damit verbracht herauszufinden, warum meine Ansichtseigenschaft nicht in meinem Ansichts-Controller festgelegt ist, nachdem ich sie von der Feder aus gestartet habe. Denken Sie daran, "[super initWithNibName ...]" im initWithNibName Ihres View Controllers aufzurufen.
quelle
Ich habe das gerade in meinem behoben. Großes Projekt, zwei Dateien. Einer war "ReallyLargeNameView" und ein anderer war "ReallyLargeNameViewController"
Basierend auf der oben gewählten zweiten Antwort habe ich beschlossen, meinen Build zu bereinigen. Nada, aber ich war immer noch verdächtig von XCode (da ich zwei identische Klassen habe, sollte ich sie abstrahieren, aber eh ...) Also arbeitet man, man nicht. Die Eigentümernamen der Datei sind soweit kopiert und eingefügt, Outlets neu angeschlossen, xCode neu gestartet, immer noch nichts.
Also lösche ich die ähnlich benannte Klasse (die eine Ansicht ist). Bald war der neue Fehler "Steckdose innen nicht angeschlossen" buchstäblich "WebView nicht Schlüsselwert" bla ... im Grunde gesagt "Visual Studio ist besser". Wie auch immer ... Ich lösche die kleinere benannte Datei und bam, es funktioniert.
XCode wird durch Dateien mit ähnlichen Namen verwirrt. Und das Projekt ist groß genug, um ein wenig neu gestartet zu werden, das könnte ein Teil davon sein.
Ich wünschte, ich hätte eine technischere Antwort als "XCode ist verwirrt", aber nun, xCode wird an dieser Stelle sehr verwirrt. Nicht verwirrt, so wie ich einem kleinen Kind helfen würde. Es funktioniert jetzt :) Sollte anderen zugute kommen, wenn das oben Gesagte nichts behebt.
Denken Sie immer daran, Ihre Builds zu bereinigen (indem Sie auch den Simulator löschen).
quelle
Ich hatte auch das gleiche Problem und mein Problem war, dass ich der ViewControllers-Schreibfeder eine andere Lokalisierung (Englisch) hinzugefügt habe, damit meine App mit der Lokalisierungsdeutsch die Schreibfeder mit der Lokalisierungs-Englisch nicht finden konnte !! Hoffe das hilft jedem!
quelle
quelle
Für mich wurde das Problem durch einen Anruf verursacht
initWithNibName:bundle:
. Ich verwende Tabellenansichtszellen aus einer NIB-Datei, um Eingabeformulare zu definieren, die darauf sitzentableViews
. Da ich keine Aussicht habe, macht es keinen Sinn, sich an eine zu binden. Wenn ichinitWithStyle:
stattdessen die Methode aufrufe und von dort aus die NIB-Datei lade, funktionieren die Dinge wie erwartet.quelle
Die vorherigen Antworten haben das Problem für mich fast gelöst, aber der letzte Schritt fehlte.
Jetzt werden alle von Ihnen hinzugefügten @IBOutlets angehängt.
Prost, Richard
quelle
Ich hatte das gleiche Problem, aber es wurde eine etwas andere Lösung gefordert. Das Problem in diesem Fall war eher die Klasse des Dateibesitzers als die Klasse der Ansicht. Um dies einzustellen, musste ich auf das Symbol "Rückwärtswiedergabe" in der unteren linken Ecke des Interface Builder-Fensters klicken. Anschließend wurden Optionen angezeigt, die die Eigenschaften des Dateibesitzers, des Ersthelfers und der Ansicht isolierten. Durch Klicken auf die erste (ein großes transparentes Feld) konnte ich die benutzerdefinierte Klasse wie oben vorgeschlagen festlegen.
quelle
Ich hatte das gleiche Problem, aber es wurde eine andere Lösung gefordert. Das Problem in diesem Fall war, dass die Klasse des Dateibesitzers nicht mit der xib-Datei verbunden war.
quelle
Ich bin heute Abend auf etwas sehr Ähnliches gestoßen, mit einer Swift UIViewController-Unterklasse. In diesem Fall funktionierte keine der oben genannten Korrekturen, aber die Neuordnung meines Codes hat funktioniert. Net-Net, bei dem eine Erweiterung der Unterklasse vor der Definition der Unterklasse in derselben Datei auftritt, scheint XCode zu verwirren, obwohl es gut kompiliert wurde. Das Update bestand darin, die Erweiterungen nach der Definition der Unterklasse zu platzieren.
Ich habe die Details in einer Antwort auf diese ähnliche Frage veröffentlicht .
quelle
In meinem Fall der angegebene Initialisierer
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
in der *** ViewController-Klasse implementiert. Selbst wenn ich einen anderen Initialisierer aufrufe, um das Objekt zu initialisieren, wird der angegebene Initialisierer aufgerufen.Um dieses Problem zu lösen, prüfen Sie, ob dies
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
auch ein geeigneter Weg ist.quelle
Ich bin auf dieses Problem etwas anders gestoßen als auf die anderen Antworten hier.
Wenn ich einfach eine neue xib-Datei erstellt, im Interface Builder einen UIViewController hinzugefügt und die benutzerdefinierte Klasse dieses UIViewController auf meinen View Controller festgelegt habe, führte dies zum Absturz "View Outlet wurde nicht festgelegt". Die anderen Lösungen hier sagen, dass Sie den Ansichtsausgang bei gedrückter Ctrl-Taste in die Ansicht ziehen sollen, aber für mich war der Ansichtsausgang ausgegraut und ich konnte ihn nicht bei gedrückter Ctrl-Taste ziehen.
Ich habe herausgefunden, dass mein Fehler darin bestand, einen UIViewController in Interface Builder hinzuzufügen. Stattdessen musste ich eine UIView hinzufügen und die benutzerdefinierte Klasse des Dateibesitzers auf meinen Ansichtscontroller festlegen. Dann konnte ich den Ansichtsausgang des Dateibesitzers bei gedrückter Ctrl-Taste auf meine neue Ansicht UIView ziehen und alles funktionierte wie es sollte.
quelle
Hatte gerade den gleichen Fehler in meinem Projekt, aber einen anderen Grund. In meinem Fall hatte ich ein IBOutlet-Setup mit dem Namen "View" in meiner benutzerdefinierten UITableViewController-Klasse. Ich wusste, dass "view" etwas Besonderes ist, weil das ein Mitglied der Basisklasse ist, aber ich dachte nicht, dass View (anderer Fall) auch ein Problem sein würde. Ich denke, einige Bereiche von Cocoa unterscheiden nicht zwischen Groß- und Kleinschreibung, und wahrscheinlich ist das Laden eines Xib einer dieser Bereiche. Also habe ich es einfach in DefaultView umbenannt und jetzt ist alles in Ordnung.
quelle
Wählen Sie den Dateieigentümer aus und öffnen Sie den Identitätsprüfer. Geben Sie den Klassennamen an, dem er entspricht. Wenn keine der oben genannten Methoden funktioniert und Sie den Ansichtsausgang immer noch nicht sehen können, geben Sie dem Eigentümer der Datei einen neuen Referenzausgang. Dann können Sie den Ansichtsausgang sehen. Klicken Sie auf das View Outlet, um eine Verbindung zwischen dem View Outlet und dem Eigentümer der Datei herzustellen. Führen Sie die Anwendung aus, dies funktioniert einwandfrei.
quelle
In meinem Fall wurde die Ansicht in xib nicht angezeigt. In xib war die Ansicht size = none (4. Registerkarte rechts). Ich setze die Größe auf Freeform und lade xCode neu. view wurde angefochten und ich habe den richtigen Link zu View gesetzt.
quelle
Wenn Sie alles versucht haben und immer noch diese Fehlermeldung erhalten, versuchen Sie, die Klassendatei von Grund auf neu zu erstellen. Denken Sie jedoch daran, das Kontrollkästchen "Auch XIB-Datei erstellen" zu aktivieren. Dadurch werden einige Elemente automatisch verknüpft, die beim separaten Erstellen dieser Dateien nicht verknüpft sind. Nachdem dies erstellt wurde, können Sie wahrscheinlich alles ausschneiden und in das neue XIB einfügen, und es sollte einwandfrei funktionieren.
Ich finde dieses Problem speziell beim separaten Erstellen von Dateien in Swift.
quelle
für mich passierte es wann
UIView von diesem ViewController muss als Unteransicht in die andere Ansicht geladen werden.
wir werden so etwas nennen
Wo
Hier fehlte loadView ,,, das Hinzufügen dieser Zeile löste mein Problem.
quelle
Ich hatte das gleiche Problem, das ich herausgefunden habe, und das liegt daran, dass ich in den Eigenschaften der Tabellenansicht unter " Inhalt" die Option " Statische Zellen " angekreuzt hatte . Funktionierte, als es auf " " geändert wurde . Screenshot ist unten.
Dynamic Prototypes
quelle
Ich hatte ein ähnliches Problem mit Xcode 9.3, und das Festlegen von "Modul" unter dem Attributinspektor "Dateibesitzer" für das Projektmodul hat dies für mich behoben.
quelle
Öffnen Sie Ihre Storyboard- Datei, in der Ihr viewController vorhanden ist, oder eine XIB- bezogene Datei mit textEdit.app und überprüfen Sie, ob der Storyboard- oder XIB-Name mit Ihrem viewController identisch ist. Ändern Sie ihn dann, speichern Sie Xcode und laden Sie ihn neu und starten Sie ihn neu.
quelle
Wenn Sie eine benutzerdefinierte Init-Methode verwenden, überprüfen Sie, ob Sie etwas Gültiges zurückgeben. Ich bin auf einen Code gestoßen, der auf so etwas abgestürzt ist:
In einer anderen Klasse wurde der Controller folgendermaßen erstellt:
Das Problem ist, dass sich in der init-Methode self nicht geändert hat und stattdessen so aussehen sollte:
quelle
Ich möchte Stephen J. unterstützen. Manchmal wird X Code nur verwirrt. Ich hatte gerade eine Erfahrung, in der ich viel mit der Benutzeroberfläche herumgespielt und einige Male Outlets hinzugefügt und gelöscht hatte. Die Steckdosen würden sich einfach nicht mehr verkabeln. Ich habe nie einen bestimmten Grund herausgefunden (ich hatte alle oben genannten Lösungen ausprobiert), und ich musste nur die NIB löschen und von Grund auf neu erstellen und tatsächlich einen anderen Namen für die NIB verwenden, bevor sie funktionieren würde. (XCode 4.6.1) Verschwendete ein paar Stunden damit.
quelle