it-swarm.com.de

Geladene Spitze, aber der Auslass 'Ansicht' wurde nicht eingestellt

Ich habe meinem Projekt eine neue Nib-Datei hinzugefügt und versucht, sie zu laden.

Wenn ich jedoch auf das Symbol in der Symbolleiste klicke, das mich zu der Ansicht führen soll, die ich erstellt habe, erhalte ich eine NSInternalInconsistencyException mit der Nachricht:

Beenden der App aufgrund einer nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: '- [UIViewController _loadViewFromNibNamed: bundle:] hat die Spitze "..." geladen, aber der Ansichtsauslass wurde nicht festgelegt. '

Also habe ich meine Nib-Datei geöffnet, und ich sehe für die Ansicht, dass keine Referenzauslässe gesetzt sind. Ich versuche jedoch, den Kreis für "Neuer Referenzauslass" zum Dateibesitzer zu ziehen und ihn zu ziehen, aber das lässt mich nicht ... Was muss ich tun, damit meine Ansicht angezeigt wird?

672
John

Die View Identity - Class Identity wurde nicht festgelegt. Nachdem Sie die entsprechende Klasse festgelegt hatten, wurde das Problem behoben.

59
John

Ihr habt recht, aber da ich ein Neuling bin, habe ich eine Weile gebraucht, um alle Schritte dafür zu finden. Folgendes hat für mich funktioniert:

  • Öffnen Sie die XIB-Datei, die Probleme verursacht
  • Klicken Sie auf das Besitzersymbol der Datei in der linken Leiste (oberes, sieht aus wie ein gelber Rahmen)
  • Wenn die rechte Seitenleiste nicht angezeigt wird, klicken Sie in der Symbolleiste auf das dritte Symbol über "Ansicht". Dadurch wird die rechte Seitenleiste angezeigt
  • Klicken Sie in der rechten Seitenleiste auf die dritte Registerkarte, die ein bisschen wie eine Zeitung aussieht
  • Stellen Sie unter "Benutzerdefinierte Klasse" oben sicher, dass Klasse der Name des ViewControllers ist, der dieser Ansicht entsprechen soll. Wenn nicht, geben Sie es ein

Custom class configuration

  • Klicken Sie in der rechten Seitenleiste auf die letzte Registerkarte, die wie ein Kreis mit einem Pfeil aussieht
  • Sie sollten "Outlets" mit "View" darunter sehen. Ziehen Sie den nebenstehenden Kreis auf das Symbol "Ansicht" in der linken Leiste (unteres sieht aus wie ein weißes Quadrat mit einer dicken grauen Kontur)

Custom class configuration

  • Speichern Sie den XIB und führen Sie ihn erneut aus
1673
Josh Justice

Dies ist der Vorschlag von Josh Justice, aber in grafischer Form (Bilder sind meine)

  1. Wählen Sie Dateieigentümer aus
  2. Wählen Sie auf der rechten Seite die benutzerdefinierte Klasse aus.
  3. Geben Sie den benutzerdefinierten Klassennamen ein

enter image description here

  1. Wählen Sie auf der rechten Seite Oultets aus
  2. Ziehen Sie den Ansichtsauslass, um die Komponente anzuzeigen

enter image description here

Schließlich wird der View Controller mit dem Rolling Code instanziiert:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

Ich kann das Problem normalerweise beheben, indem ich die Verbindung zwischen dem Besitzer der Datei und der Ansicht wieder herstelle. Ziehen Sie bei gedrückter Strg-Taste vom Eigentümer der Datei auf Ihre Ansicht (in IB) und wählen Sie Ansicht aus dem Einblendmenü.

66
Rohit Mandiwal

Sind Sie sicher, dass Sie der Eigenschaft "view" IhresViewControllers eine UIView (oder Unterklasse) zugewiesen haben? 

Klicken Sie mit der rechten Maustaste auf "File Owner" im linken Bereich des xib für yourViewController, und überprüfen Sie, ob der Ausgang "view" festgelegt ist. 

dadurch wird das Problem definitiv behoben

26
Shehbaz Khan

Ich hatte das gleiche Problem mit XCode 4.6.3. Ich hatte mit ein paar Dateien namens MySettingsView.h und .m angefangen, sie jedoch zugunsten von MySettingsViewController.h gelöscht, aber obwohl ich die meisten der hier genannten Hinweise ausprobierte, gab es trotzdem Fehler 

2013-07-05 11: 48: 17.205 MyApp [39024: c07] *** Beenden der App aufgrund der nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: '- [UIViewController _loadViewFromNibNamed: bundle:] hat die .__ geladen. "MySettingsView" -Spitze, aber der View-Ausgang wurde nicht festgelegt. '

Es war offensichtlich immer noch "verwirrt", als versucht wurde, MySettingsView.xib anstelle von MySettingsView Controller . Xib zu laden. Vielleicht ist die Logik "zu tun, was ich meine" zu schick.

Also habe ich das Problem gelöst, indem ich den NIB/XIB-Namen in MySettingsViewController.m hartcodiert habe:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}
14
Nathan

Für mich waren alle hier genannten Dinge https://stackoverflow.com/a/6395750/939501 wahr, aber es wurde immer noch ein Fehler ausgegeben. Grund war, dass ich eine View-Klasse mit dem Namen ABCView erstellt und sie später gelöscht habe einen View-Controller als ABCViewController, so dass er irgendwie auf den alten ABCView im neuen View-Controller Bezug nahm, musste ich den ABCViewController löschen und einen neuen mit einem anderen Namen hinzufügen, der mein Problem löste.

Vielen Dank

13

Mein Problem damit war, dass sich im Klassenordner eine doppelte Spitze befand, in der die Ansicht nicht festgelegt war. xcode schien eine Feder für einen Build auszuwählen und dann die andere, wenn ich das Projekt das nächste Mal baute. Einfach den anderen gelöscht. Sieht gut aus. Doh!

6
Matt

Jedem, der eine xib-Methode zum Erstellen einer UIView verwendet, und dieses Problem auftritt, werden Sie feststellen, dass Sie unter dem Menüpunkt "Anschlüsse" keine "view" -Option haben. Wenn Sie jedoch die benutzerdefinierte Klasse der Besitzer der Datei auf einen UIViewController setzen, sehen Sie den "view" -Ausgang, den Sie einfach per CMND an den CustomView anschließen können.

5
user2965721

Ich habe das gerade bei mir behoben. Großes Projekt, zwei Dateien. Eines war "ReallyLargeNameView" und ein anderes war "ReallyLargeNameViewController"

Basierend auf der oben gewählten zweiten Antwort entschied ich, dass ich meinen Build reinigen sollte. Nada, aber ich war immer noch im Verdacht, XCode zu haben (da ich zwei identische Klassen habe, sollte man sie abstrahieren, aber eh ...) Also arbeitet einer, einer nicht. Die Eigentümernamen der Datei sind soweit kopiert und eingefügt, die Outlets wurden erneut aufgehängt, der xCode wurde neu gestartet, aber immer noch nichts.

Also lösche ich die gleichnamige Klasse (was eine Ansicht ist). Bald wurde der neue Fehler "Steckdose innen nicht angeschlossen" buchstäblich "webView nicht Schlüsselwert" blah ... im Grunde gesagt "Visual Studio's better". Wie auch immer ... ich lösche die kleinere benannte Datei, und bam, es funktioniert.

XCode wird von Dateien mit ähnlichen Namen verwirrt. Und das Projekt ist groß genug, um einen Neustart durchzuführen, das kann ein Teil davon sein.

Wünschte, ich hätte eine technischere Antwort als "XCode ist verwirrt", aber nun, xCode wird an diesem Punkt viel verwirrt. Konfusionierte es genauso, wie ich einem kleinen Kind helfen würde. Es funktioniert jetzt, :) Sollten andere davon profitieren, wenn das obige nichts behebt.

Denken Sie immer daran, Ihre Builds zu säubern (indem Sie auch den Simulator löschen).

4
Stephen J

Ich habe gerade mehr als eine Stunde damit verbracht herauszufinden, warum meine Ansichtseigenschaft nicht in meinem Ansichts-Controller festgelegt ist, wenn sie von der Spitze aus initiiert wird. Denken Sie daran, im initWithNibName Ihres View-Controllers "[super initWithNibName ...]" aufzurufen.

4
Kamil.S

Ich hatte auch das gleiche Problem und mein Problem war, dass ich eine andere Localization (Englisch) zur ViewControllers-Spitze hinzugefügt habe, sodass meine App mit der Localization German die Spitze mit dem Localization-Englisch nicht finden konnte. Ich hoffe, das hilft jedem!

3
Weini

Ich hatte das gleiche Problem, als ich versehentlich den xib-Verweis gelöscht und wieder hinzugefügt habe. Ich habe nur die Verbindung zwischen dem Dateibesitzer und der Ansicht hergestellt.

3
Nidhin

Öffnen Sie Ihre Storyboard Datei, in der Ihr viewController existiert, oder XIB zugehörige Datei mit textEdit.app und überprüfen Sie, ob der Storyboard- oder XIB-Name mit Ihrem viewController identisch ist, ändern Sie ihn, speichern Sie Xcode und starten Sie ihn neu.

1

In meinem Fall wurde der angegebene Initialisierer - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil in der *** ViewController-Klasse implementiert. Wenn Sie also einen anderen Initialisierer zum Initialisieren des Objekts aufrufen, wird der angegebene Initialisierer aufgerufen. 

Um dieses Problem zu beheben, ist die Überprüfung, ob die - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil auch ein geeigneter Weg ist.

1
lynulzy

Für mich wurde das Problem durch den Aufruf von initWithNibName:bundle: verursacht. Ich verwende Tabellensichtzellen aus einer Spitzendatei, um Eingabeformulare zu definieren, die sich auf tableViews befinden. Da ich keine Aussicht habe, macht es keinen Sinn, mich an eine zu binden. Wenn ich stattdessen die initWithStyle:-Methode aufrufe und von dort aus die Nib-Datei lade, funktionieren die Dinge wie erwartet.

1
DaveDude

Ich hatte das gleiche Problem, aber es wurde eine andere Lösung gefordert. Das Problem in diesem Fall war, dass die Klasse des Dateieigentümers nicht mit der Xib-Datei verbunden war.

1
user1951454

Ich hatte das gleiche Problem, aber eine etwas andere Lösung war gefragt. Das Problem war in diesem Fall die Klasse des Dateieigentümers und nicht die Klasse der Ansicht. Um dies festzulegen, musste ich auf das Symbol "Rückwärts spielen" in der linken unteren Ecke des Interface Builder-Fensters klicken. Es erschienen dann Optionen, die die Eigenschaften des Dateibesitzers, des Erstantworten und der Ansicht isolierten. Durch Klicken auf die erste (eine große transparente Box) konnte ich die benutzerdefinierte Klasse wie oben vorgeschlagen festlegen.

1
Michael Stern

Ich bin heute Abend auf etwas Ähnliches gestoßen, mit einer Swift UIViewController-Unterklasse. In diesem Fall funktionierte keine der oben genannten Korrekturen, aber das Umordnen meines Codes ein wenig. Net-net, das eine Erweiterung der Unterklasse hat, tritt auf, bevor die Definition der Unterklasse selbst in derselben Datei XCode zu verwirren scheint, obwohl die Kompilierung fein ist. Das Update bestand darin, die Erweiterungen nach der Definition der Unterklasse zu platzieren.

Ich habe die Details in einer Antwort auf diese ähnliche Frage gepostet.

1

Ich hatte ein ähnliches Problem mit Xcode 9.3 und das Festlegen von "Module" unter dem Attribut-Inspector "File Owner" für das Projektmodul behebte dies für mich.

0
nananta

In meinem Fall wurde die Ansicht nicht in xib ..__ angezeigt. In xib war die Ansicht size = none (4. Tab rechts). Ich habe die Größe auf Freeform gesetzt und xCode neu geladen. Die Ansicht wurde angefochten und ich habe den richtigen Link auf Ansicht gesetzt.

0
OrdoDei

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:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

In einer anderen Klasse wurde der Controller folgendermaßen erstellt:

CustomController *controller = [[CustomController alloc] init];

Das Problem ist, dass sich self in der init-Methode nicht geändert hat und stattdessen so aussehen sollte:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}
0
Declan Land

Ich hatte das gleiche Problem, ich habe es herausgefunden und es liegt daran, dass ich in den Eigenschaften von Table View unter Content Option "Static cells" angekreuzt hatte. Arbeitete bei Änderung in "Dynamic Prototypes". Screenshot ist unter .  enter image description here

0
Saranjith

Hatte gerade den gleichen Fehler in meinem Projekt, aber aus verschiedenen Gründen. 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 dies ein Mitglied der Basisklasse ist, aber ich glaube nicht, dass View (anderer Fall) ebenfalls ein Problem wäre. Ich denke, dass einige Bereiche von Cocoa nicht zwischen Groß- und Kleinschreibung unterscheiden, und das Laden einer Xib ist wahrscheinlich einer dieser Bereiche. Also habe ich es einfach in DefaultView umbenannt und jetzt ist alles gut.

0
eselk

wählen Sie den Besitzer der Datei aus und öffnen Sie den Identitätsinspektor, um den Klassennamen anzugeben, dem er entspricht. Wenn keine der oben genannten Methoden funktioniert und Sie den View-Ausgang immer noch nicht sehen, dann dem Anschlussinhaber eine neue Referenz-Outlet-Verbindung zuweisen, können Sie den View-Ausgang sehen. Klicken Sie auf den View Outlet, um eine Verbindung zwischen dem View Outlet und dem Besitzer der Datei herzustellen. Führen Sie die Anwendung aus. Dies funktioniert gut.

für mich ist es passiert, wann 

  • Ich habe eine ViewController-Klasse (.mm/h), die der Nib-Datei zugeordnet ist.
  • UIView von diesem ViewController muss als Unteransicht auf die andere Ansicht geladen werden,

  • wir werden so etwas nennen 

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }
    

Woher 

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Hier fehlte loadView , das Hinzufügen dieser Zeile löste mein Problem. 

0
Amitg2k12

Ich würde gerne Stephen J zum zweiten Mal machen. Manchmal wird X Code einfach nur verwirrt. Ich hatte gerade eine Erfahrung, bei der ich viel mit der Benutzeroberfläche herumgespielt hatte 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 sie von Grund auf neu erstellen, und musste tatsächlich einen anderen Namen für die NIB verwenden, bevor sie funktionieren konnte. (XCode 4.6.1) Hat ein paar Stunden damit verschwendet.

0
BrianH

Wenn Sie einen Swift -Code haben, der mit @objc auf einen anderen Namespace verweist, müssen Sie den Objective-C-Klassennamen verwenden:

@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....

In diesem Fall müssen Sie NamespacedSomeViewController im IB verwenden.

0
Gomfucius

Die vorherigen Antworten fast lösten das Problem für mich, aber der letzte Schritt fehlte.

  1. Erstellen Sie eine Xib- und eine Swift-Datei mit demselben Namen.

 Add View and Swift File

  1. Legen Sie den Dateieigentümer als UIView-Unterklasse fest.

 enter image description here

  1. Ziehen Sie einen Ausgang aus der Ansicht in die UIView-Unterklasse und nennen Sie ihn "contentView".

 add the contentview

  1. Fügen Sie diesen benutzerdefinierten Initialisierer hinzu, damit beim Laden der xib die contentView angehängt wird

 add the contentview as a subview

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Nun werden alle von Ihnen hinzugefügten @IBOutlets angehängt.

Prost, Richard

0
COSMO BAKER

Wenn Sie alles versucht haben und immer noch diese Fehlermeldung angezeigt wird, versuchen Sie, die Klassendatei von Grund auf neu zu erstellen. Denken Sie jedoch daran, das Kontrollkästchen "XIB-Datei erstellen" zu aktivieren. Dadurch werden einige Elemente automatisch verknüpft, die beim Erstellen dieser Dateien nicht verknüpft sind. Nachdem dies erstellt wurde, können Sie wahrscheinlich alles auf der neuen XIB ausschneiden und einfügen, und es sollte funktionieren.

Ich finde dieses Problem speziell beim Erstellen von Dateien in Swift.

0
Travis M.