web-dev-qa-db-fra.com

NSGenericException ', raison:' Les séquences push ne peuvent être utilisées que lorsque le contrôleur source est géré par une instance de UINavigationController

donc je fais une application avec 5 contrôleurs de vue, le premier est intégré dans un UINavigationController et la séparation entre les 4 premiers contrôleurs de vue fonctionne bien. Cependant, l'introduction d'un 5ème contrôleur de vue a cassé cela, et j'obtiens l'erreur

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.'

Je n'ai rien fait différemment avec ce contrôleur de vue 5ème, c'est juste un ViewController standard avec une vue d'image et une étiquette, et toutes mes séquences sont appelées par des boutons Ctrl glissant dans le storyboard. Quelqu'un at-il une idée de ce qui cause cela? 

Merci

51
DouglasBoone

ajouter le contrôleur de navigation à votre vue initiale  

  1. Sélectionnez la vue initiale 
  2. Allez dans Éditeur -> Intégrer dans -> Contrôleur de navigation.
153
Kirit Vaghela

Dans mon cas, au moment où le VC original exécutait la séquence, le contrôleur de navigation était en transition et changeait déjà le VC visible.

Je l'ai résolu en faisant:

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

plus de crash. :)

14
Gaston

Définissez UINavigationcontroller en tant que contrôleur de vue initiale (Scène initiale) dans StoryBoard.

13
Vinay

Cela est probablement dû au fait que votre bouton Push diffère du bouton ou de tout ce qui pointe vers un contrôleur de vue et non le contrôleur de vue de navigation dont votre contrôleur de vue hérite. Donc, vous devez pointer la transition vers le contrôleur de navigation.

J'espère que cela t'aides.

4
Yosep Kim

Vous devez simplement intégrer un contrôleur de navigation dans votre contrôleur de vue source (la seule vue initiale, pas la vue pour laquelle vous insistez). Cela peut être fait en sélectionnant le contrôleur de vue source et en sélectionnant Aller à l'éditeur -> Intégrer -> Contrôleur de navigation. 

Si vous pensez que la barre de navigation que le contrôleur de navigation a fait. Il suffit de sélectionner le contrôleur de navigation, dans la case "Afficher l'inspecteur d'attributs", désactivez la barre de navigation d'affichage. 

1
Nicholas Chew

dans mon cas particulier, l'emplacement d'appel dans un sous-ensemble de vues nécessitant un Push était uniquement à partir de code et non connectable via IB. Le projet original de création du sous-ensemble de vues a été lancé avec un bouton dédié et était donc IB'able. 

Aucune séquence n'était configurable, et donc tout Push a entraîné cette erreur.

Ma solution était simple: [auto showViewController: targetViewController expéditeur: auto];

0
drew..

J'ai rencontré le même problème après quelques minutes, je pouvais le résoudre.

J'ai supprimé les connexions de séquence et j'ai à nouveau établi des connexions d'une vue vers d'autres vues.C'est le problème qui est résolu .. .. c'est que j'ai supprimé des vues et que j'ai apporté peu de modifications aux vues dans la scène du scénario. Il est important de vérifier que les connexions fonctionnent correctement d’une vue à l’autre.

Cela peut être utile à quelqu'un j'espère .... 

0

Si votre application a un contrôleur de navigation en tant que contrôleur de vue racine de la fenêtre, sélectionnez un fichier de storyboard, puis sélectionnez le contrôleur de navigation correspondant. Dans la zone Métriques simulées, cochez la case Contrôleur de vue initial. Cela a fonctionné pour moi. J'espère que cela t'aides.

0
Singh

si vous utilisez la classe UIViewController

puis cochez une chose dans la déclaration d'identifiant de division Par exemple, vous avez défini

Identifiant: MySegue1 Segue: Present Modally (à choisir si vous utilisez la classe UIViewController)

Présentation: Défaut Transition: Défaut

et vérifiez une dernière chose que votre décélération d'objet est correcte

Peut-être que ma réponse n’est pas tout à fait correcte, mais c’est ce que j’ai appris à connaître après cette erreur . Espérons que cela vous aidera un peu.

0
Shashwat

J'ai rencontré le même problème et j'ai beaucoup cherché, mais rien ne pouvait m'aider. Enfin, j’ai essayé de nombreuses façons.Enfin, j’ai trouvé la solution . Je fais un projet sous xcode 5 et développé des vues à l’aide de story board . J'ai 3 écrans et mes connexions sont ..

view1 à view2 -> Push

view2 to view3 -> Push

view2 to view1 -> modal (c'est mon erreur, nous devons utiliser uniquement le Push)

cela fonctionne bien mais j’ai placé l’élément de bouton de barre (Retour) dans view2 et segue connection était modal. lorsque je clique sur le bouton de la barre view2, il est redirigé correctement vers view1, mais lorsque j'essaie d'aller de view1 à view2, j'ai la même erreur . Parce que si vous donnez le type Push segue de la vue source à la vue de destination, vous devez utiliser même Pousser le passage de la vue de destination à la vue source.

J'espère que cela sera utile à quelqu'un..merci

0

J'ai eu le même problème que toi.

Mon problème était que j'appelais l'identifiant d'une segue qui n'était pas accessible depuis la classe dont je l'appelais. Je l'ai résolu en ajoutant une autre séquence directement à la vue du ViewController qui avait accès au cours dans lequel je travaillais. J'espère que cela vous aidera.

0
bdv