webentwicklung-frage-antwort-db.com.de

NSGenericException ', Grund:' Push-Segmente können nur verwendet werden, wenn der Quellcontroller von einer Instanz von UINavigationController verwaltet wird

ich mache also eine App mit 5 View-Controllern. Der erste ist in einen UINavigationController eingebettet und der Segue zwischen den ersten 4 View-Controllern funktioniert einwandfrei. Die Einführung eines 5th View Controllers hat dies jedoch gebrochen, und ich erhalte den Fehler

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

Ich habe mit diesem 5. View-Controller nichts anderes gemacht, es handelt sich lediglich um einen Standard-ViewController mit einer Bildansicht und einem Label. Alle meine Segmente werden durch Ziehen mit der STRG-Taste im Storyboard aufgerufen. Hat jemand eine Idee, was das verursacht? 

Vielen Dank

51
DouglasBoone

füge den Navigations-Controller zu deiner ursprünglichen Ansicht hinzu  

  1. Wählen Sie die Startansicht 
  2. Gehe zu Editor -> Einbetten in -> Navigation Controller.
153
Kirit Vaghela

In meinem Fall zu der Zeit, als das Original VC das Segue durchführte, wurde der Navigations-Controller umgestellt und der sichtbare VC wurde bereits geändert.

Ich habe es gelöst, indem ich

if (self.navigationController.visibleViewController == self) {
    [self performSegueWithIdentifier:@"thankyou" sender:self];
}

kein Absturz mehr :)

14
Gaston

Legen Sie den UINavigationcontroller in StoryBoard als Initial View-Controller (Ausgangsszene) fest.

13
Vinay

Dies ist höchstwahrscheinlich darauf zurückzuführen, dass der Push-Befehl von der Schaltfläche oder was auch immer auf einen Ansichts-Controller verweist, nicht der Navigations-Ansichts-Controller, den Ihr Ansichts-Controller erbt. Sie müssen also den Segue auf den Navigationscontroller richten.

Hoffe das hilft.

4
Yosep Kim

Sie müssen lediglich einen Navigations-Controller in Ihren Source View Controller einbetten (die erste Ansicht, nicht die Ansicht, die Sie suchen). Dies kann durch Auswahl von Source View Controller und Gehe zu Editor -> Einbetten in -> Navigations-Controller erfolgen. 

Wenn Sie der Meinung sind, dass die Navigationsleiste vom Navigations-Controller übernommen wurde. Wählen Sie einfach den Navigations-Controller aus. Deaktivieren Sie im Informationsfenster "Attribute anzeigen" die Navigationsleiste. 

1
Nicholas Chew

in meinem speziellen Fall war die Stelle, an der Sie einen Teil der Aufrufe aufrufen konnten, für die ein Push erforderlich war, nur Code und konnte nicht über IB angeschlossen werden. Das ursprüngliche Projekt zur Erstellung der Untermenge von Ansichten wurde mit einer dedizierten Schaltfläche gestartet und war somit IB-fähig. 

Es war kein Segment konfigurierbar, und daher führte jeder Push zu diesem Fehler.

Meine Lösung war einfach: [self showViewController: targetViewController sender: self];

0
drew..

Ich habe das gleiche Problem nach ein paar Minuten gefunden, ich konnte es lösen.

Ich habe Segue-Verbindungen gelöscht und ich habe wieder Verbindungen von einer Ansicht zu anderen Ansichten hergestellt. Das Problem ist damit gelöst. Die Sache ist, dass ich Ansichten gelöscht habe und in der Storyboard-Szene einige Änderungen an den Ansichten vorgenommen habe. .__ Wichtig ist, dass Sie die Verbindungen von einer Ansicht zur anderen ordnungsgemäß prüfen.

Dies kann für jemanden hilfreich sein, den ich hoffe .... 

Wenn Ihre Anwendung über einen Navigationscontroller als Root-View-Controller des Fensters verfügt, wählen Sie die Storyboard-Datei und dann den entsprechenden Navigationscontroller aus. Aktivieren Sie in Simulated Metrics das Kontrollkästchen Is Initial View Controller. Das hat bei mir funktioniert. Hoffe das hilft.

0
Singh

wenn Sie die UIViewController-Klasse verwenden

Überprüfen Sie dann eine Sache in der Deklaration der Segmentkennung Sie haben beispielsweise festgelegt

Kennung: MySegue1 Segue: Present Modally (Wählen Sie diese Option, wenn Sie die UIViewController-Klasse verwenden.)

Darstellung: Standard Übergang: Standard

und überprüfen Sie noch eine weitere Sache, dass Ihre Objektverzögerung korrekt ist

Vielleicht ist meine Antwort nicht genau richtig, aber das ist alles, was ich über diesen Fehler erfahren werde. Ich hoffe, es wird Ihnen helfen.

0
Shashwat

Ich hatte das gleiche Problem und habe viel gesucht, aber nichts konnte mir helfen. Ich habe es auf vielerlei Weise versucht. Schließlich fand ich eine Lösung ... Ich mache ein Projekt in Xcode 5 und entwickelte Ansichten mit Storyboard .. Ich habe 3 Bildschirme und meine Verbindungen sind ..

view1 bis view2 -> Push

view2 bis view3 -> Push

view2 to view1 -> modal (dies ist mein Fehler, wir müssen nur Push verwenden)

das funktioniert gut, aber ich habe in View2 ein Bar Button-Element (Back) platziert, und die Segue-Verbindung war modal. Wenn ich auf den View2-Balken-Button klicke, wird er korrekt zu view1 umgeleitet, aber wenn ich versuche, von view1 zu view2 zu gelangen, habe ich die gleiche Fehlermeldung erhalten gleich Push zwischen Zielansicht und Quellansicht wechseln ..

Ich hoffe es wird für jemanden hilfreich sein

Ich hatte das gleiche Problem wie du.

Mein Problem war, dass ich den Bezeichner eines Segues anrief, auf das nicht innerhalb der Klasse zugegriffen werden konnte, aus der ich das Segue aufrief. Ich löste es, indem ich der Ansicht des ViewControllers, der Zugriff auf die Klasse hatte, in der ich arbeitete, ein weiteres Segment direkt hinzufügt. Ich hoffe, das hilft.

0
bdv