web-dev-qa-db-fra.com

Xcode: "La scène est inaccessible à cause du manque de points d'entrée" mais ne la trouve pas

Xcode 4.5.2 me donne l'avertissement suivant:

Unsupported Configuration    
Scene is unreachable due to lack of entry points and does not have an identifier 
for runtime access via -instantiateViewControllerWithIdentifier:.

Malheureusement, je ne peux pas identifier la scène incriminée. La sélection de l'avertissement dans le navigateur de problèmes ne met en évidence aucun élément du scénarimage. J'ai un storyboard assez compliqué (plus de 30 scènes).

Aucune suggestion?

Screenshot for warning

89
Wolfy

Alors que ce fil est vieux, je n'ai pas vu de réponse décrivant ce qui a fonctionné pour moi, alors voilà ...

J'ai eu cette erreur et l'examen visuel du storyboard a montré que tous les contrôleurs de vue semblaient être connectés au contrôleur de vue racine.

J'ai essayé de nommer les 17 contrôleurs de vue du storyboard (comme dans la réponse de @ bobnoble). J'ai utilisé une convention de dénomination basée sur le nom long du contrôleur de vue, par exemple. "jvc" pour "Contrôleur de vue de travaux". Lorsque j'ai essayé de construire, un message d'erreur indiquant qu'un nom de duplicata était dupliqué a été envoyé à l'un des contrôleurs de vue. En traquant les choses, j’ai trouvé que j’avais un duplicata d’un contrôleur de vue empilé exactement au-dessus de son jumeau. Je soupçonne qu’il s’agissait d’une expérience d’interface utilisateur qui a été endommagée par un copier-coller et que je n’ai pas annulée complètement.

Quoi qu'il en soit, la suppression du jumeau non connecté a résolu mon problème. Après cela, j'ai supprimé tous les noms VC car ils ne sont pas référencés dans le code.

50
Bob H

Dans votre storyboard, sélectionnez chaque contrôleur de vue (flèche rouge dans l'image ci-dessous) et examinez le champ ID du storyboard (ovale rouge). Aucun des champs ID Storyboard ne doit être vide. Quand vous en trouvez un, c'est le coupable.

enter image description here

139
bobnoble

Je viens d'avoir cette erreur exacte avec un Storyboard simple scène, et tout ce que je devais faire pour résoudre ce problème était de cocher la case "Est-ce que le contrôleur de vue initial" est coché pour le contrôleur de vue 1 dans le Storyboard. Je soupçonne que Xcode avait l'habitude de cocher cette case pour vous dans cette situation, mais ne le fait plus.

Check the box at the bottom

Cochez la case correspondant à l’un des contrôleurs de vue de votre scénario et vous devriez être bon.

29
w0mbat

J'ai bien peur que vous deviez les parcourir toutes les 30 et vérifier si elles ont un ID Storyboard ou une transition vers ce contrôleur de vue. L'un des deux est requis, les deux est également une option.

20
Scott Berrevoets

Ce problème peut se produire dans l'un des scénarios suivants:

Cas I: Si aucune des scènes du storyboard n'est marquée "isInitialViewController".

Correction: identifiez le contrôleur de vue racine et marquez-le comme "isInitialViewController" dans votre SB. Dans ce cas, l'ID de storyboard n'est pas obligatoire.

Cas II

Il peut arriver que vous n'ayez pas besoin d'avoir un initialViewController dans un storyboard. Par exemple: lors de l'utilisation de plusieurs story-boards.

Correction: dans ce cas, assurez-vous que le "storyboard id" est correctement attribué et que vous vous référez à la première scène à utiliser dans le storyboard à l'aide de cet identifiant. Par exemple:

UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil];
MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];

Dans ce cas "storyboard id" est obligatoire.

Cas III

Vous avez votre initialViewController connecté. Mais vous obtenez toujours cet avertissement. Cela est dû au fait que certaines scènes du storyboard peuvent ne pas être liées à un "segue" et qu’elles n’ont pas non plus de "id de storyboard". Scannez votre storyboard pour voir si un "segue" est nécessaire. Connectez le segue si cela manque. Si une séquence n'est pas nécessaire, assurez-vous de donner un "storyboard id" car c'est le seul moyen de faire référence à la scène à partir de votre code, comme indiqué dans l'exemple de code ci-dessus.

J'espère que cela t'aides

8
shah1988

Vous n'avez pas besoin de définir Storyboard ID pour toutes les scènes ou UINavigationController

Eh bien, j'ai environ 50 à 60 scènes et je viens de recevoir ces avertissements afin de me rendre compte que seul le contrôleur (Scène) ou le NavigationController qui n'est pas connecté à la séquence doit définir Storyboard ID.

enter image description here

Vous pouvez voir que dans l'image ci-dessus UINavigationController n'est pas lié à segue, c'est un coupable de cet avertissement.

Donnez-lui simplement un ID Storyboard pour supprimer cet avertissement.

6
Kampai

J'ai eu le même problème. J'ai beaucoup de points de vue sur mon story-board avec un contrôleur de navigation et de barre d'onglets. Pour moi, c’était juste un avertissement pour vous faire savoir que certaines des vues ne sont pas connectées. Assurez-vous que toutes vos vues sont connectées d'une manière ou d'une autre au contrôleur de vue racine. Je commençais ce projet à partir de zéro pour éliminer cet avertissement et je l'avais remarqué quand une vue n'était pas connectée.

5
Richard

Moyen le plus simple de trouver la scène incriminée:

allez dans le navigateur de problème (dans le panneau de gauche, à côté du bouton de recherche), et double-cliquez sur l'erreur. Une fenêtre contextuelle contenant la scène incriminée sera centrée au centre de la fenêtre.

(C’est en fait généralement vrai - double-cliquer sur une erreur entraînera généralement un popup contenant l’erreur centrée - un petit truc bien ordonné!)

Remarque latérale: Parfois, XCode donnera cette erreur de manière incorrecte pour une scène qui est le contrôleur de vue racine d'un contrôleur de navigation (c'est-à-dire le contrôleur de vue initial). Un correctif simple consiste à attribuer à ce contrôleur de vue racine un ID Storyboard, en compilant (l'erreur devrait disparaître), puis en supprimant l'ID de storyboard (plus aucune erreur).

3
ajay14

Avec Xcode 7, cela peut être géré facilement. Il n'est pas nécessaire de parcourir manuellement toutes les scènes pour en trouver une problématique. Allez d'abord dans le Navigateur de rapport, où vous pouvez obtenir des informations plus détaillées sur les problèmes connus. La description du problème peut ressembler à ceci:

Base.lproj/Main.storyboard: fPh-fe-F5F: avertissement: la scène est inaccessible en raison d’un manque de points d’entrée et ne dispose pas d’identificateur d’accès à l’exécution via -instantiateViewControllerWithIdentifier :.

Avec cette information, vous pouvez copier l'ID d'objet, dans ce cas fPh-fe-F5F, et rechercher dans l'espace de travail l'occurrence de cette chaîne. La chaîne se trouve dans le fichier Main.storyboard. Double-cliquez sur le résultat de la recherche et vous ouvrirez Main.storyboard avec la scène sélectionnée. Une fois que vous connaissez une scène problématique, vous pouvez facilement résoudre le problème en définissant l'ID du storyboard ou en sélectionnant "Le contrôleur de vue initiale".

2
Sergio

Pour moi, ce n'était pas à cause d'un Storyboard ID Ou d'un Segue. Je recevais cet avertissement parce que je n'avais pas défini le View Controller's Custom Class.

Sélectionnez le View Controller Sur le Storyboard, puis dans le Utilities Pane, Sélectionnez l'icône Identity Inspector. Sous Custom Class, Voyez quelle valeur se trouve à l'intérieur du champ Class.

Si elle indique simplement UIViewController, vous devez entrer le nom de la classe. Ce sera le nom de vos fichiers .h Et .m Qui constituent votre sous-classe personnalisée UIViewController.

2
user3344977

Le moyen le plus simple de voir quel contrôleur ou quelle scène est à l'origine de ce problème est le suivant:

  • Ctrl-clic sur votre .storyboard dans le navigateur de projet et en sélectionnant Open As > Source Code. Cela fera apparaître le XML sous-jacent du Storyboard.
  • Dans cette vue, l'avertissement sera clairement lié à une ligne dans le XML qui se rapporte à la scène incriminée.

Or, dans mon cas, l'avertissement était particulièrement agaçant, car la "scène fautive" avait un identifiant et un lieu de rendez-vous! J'ai pu remédier au problème en supprimant la scène puis en annulant la suppression. Pas élégant, mais travaillé. J'ai sauvegardé mon Storyboard avant de faire cela. Rétrospectivement, j'aurais dû faire une copie et diff 'avant-après.

2
Dmitry Minkovsky

Je suis venu à cette question aujourd'hui. J'utilise Xcode 6.3 et la réponse à la question du PO est assez simple maintenant:

Sélectionnez le contrôleur de vue que vous souhaitez être le premier, affichez l'inspecteur des attributs et, dans la section Contrôleur de vue, assurez-vous

Est le contrôleur de vue initiale

est vérifié. Voilà!

2
Zonker.in.Geneva

Vous pouvez simplement définir un identifiant. Sur l'inspecteur d'attributs dans le volet de droite, vous trouverez un champ appelé "Identificateur". Il suffit de mettre une chaîne là-dedans, cela devrait fonctionner

Vous pouvez cliquer sur le contrôleur de navigation et, sous l'inspecteur d'attributs, cliquer sur le bouton "Contrôleur de vue initiale", ce qui devrait également fonctionner.

1
Mohammad Rabi

j'ai rencontré le même problème et résolu avec mettre sur l'ID du storyboard tout identifiant pour tous les viewController et NavigationController également; l'erreur sera immédiatement supprimée

prendre plaisir!!!

1
Sonic

Donner simplement à tous les MVC un identifiant de storyboard a fonctionné pour moi.

0
Elia Döhler

Peut-être que ce XQuery vous aidera à trouver ces scènes désagréables

for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id      (: find every scene that has an empty storyboardIdentifier :)
where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController             (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) 
return ($i, $i/../@customClass)                                                                   (: return the storyboard-id and the customClass, if any :)

Si xqilla est installé sur votre ordinateur, vous devez enregistrer la requête dans un fichier et l’utiliser comme suit:

xqilla <xqueryfile> -i <path to your storyboard>
0
parallaxe

J'avais le même problème, mais je me suis rendu compte que j'utilisais la vue conteneur et au lieu de supprimer le contrôleur de vue par défaut, j'ai supprimé son contrôleur de vue Segue.So qui restait dans le storyboard, de même que l'avertissement. C'est donc l'un des cas où un avertissement apparaît si le contrôleur de vue par défaut de la vue de conteneur n'est pas supprimé correctement lorsque vous n'en avez pas besoin.

0
deep

J'ai eu la même erreur: pour moi, l'erreur était que je n'avais pas lancé de contrôleur de vue dans mon story-board.

La correction qui a supprimé cet avertissement.

0

J'ai reçu cet avertissement lorsque je rencontre un UIViewController dans Storyboard sur lequel rien n'est défini. J'ai évité cet avertissement en y affectant l'identifiant Storyboard.

0
Durga Vundavalli

Voici ce qui a fonctionné pour moi:

  1. Ouvrez le storyboard dans un éditeur de texte.
  2. Changez la version de 3.0 à 2.0, sauvegardez-la et fermez-la.
  3. Ouvrez-le à nouveau dans Visual Studio. Il va automatiquement convertir et ouvrir le document.
0
vegas2ny

J'ai essayé tout ce qui est décrit ci-dessus en vain. J'avais tout connecté correctement dans IB, avec exactement un UIViewController désigné contrôleur de vue racine. Je n'avais pas d'identifiant, mais je les ai ajoutés à tous mes contrôleurs.

La seule façon pour que l'avertissement disparaisse est de faire tout ce qui précède (y compris un redémarrage de l'ordinateur et une construction propre) alors basculer vers une branche sans erreur de mon projet dans git et inversement.

Vous ne savez pas quelle action a corrigé le problème, ni quelle combinaison d'actions, mais ce n'était pas une construction propre. Cela pourrait être un sous-produit de Main.storyboard changeant toujours lors de la simple ouverture, ce qui signifie que je dois git commit -m "Stupid storyboard" plus souvent que je ne le souhaite.

0
Corwin Newall

Je ne sais pas si cela n'a pas encore été mentionné ou non, mais une autre raison pour laquelle vous pourriez recevoir cet avertissement est si vous avez une transition dans la mauvaise direction. Par exemple, dans mon projet, je recevais cet avertissement, mais tous mes contrôleurs étaient en fait connectés. Cependant, l'un d'entre eux avait une séquence qui essayait essentiellement de présenter le parent de l'enfant au lieu du parent qui présente l'enfant. Cela a provoqué le même avertissement.

0
miken.mkndev