web-dev-qa-db-fra.com

Impossible de trouver un storyboard nommé «MainStoryBoard» dans le bundle NSBundle

J'ai lancé une nouvelle application il y a quelques jours et j'ai commencé à travailler avec le simulateur pour la tester. J'ai commencé comme un projet vide et j'ai ajouté manuellement le storyboard. Le simulateur construit et exécute mon application très bien, mais lorsque j'essaye de construire sur mon iPhone, j'obtiens le message ' Impossible de trouver un storyboard nommé' MainStoryBoard 'dans le bundle NSBundle ".

Google n'a rien trouvé et cette question m'a suggéré de vérifier ma cible pour le storyboard, mais tout est en place. Même si quelque chose n'était pas en place, le simulateur ne fonctionnerait pas non plus.

Est-ce que quelqu'un peut-il me montrer la bonne direction?

45
chriskievit

Le simulateur n'est pas sensible à la casse, mais l'appareil l'est. Si votre storyboard s'appelle MainStoryboard, pas MainStoryBoard, cela causera votre problème.

35
jrturton

Mon application fonctionnait normalement sur le simulateur iPhone, mais étrangement Xcode a cessé de répondre et j'ai dû forcer la fermeture de Xcode. Lorsque j'ai redémarré Xcode, j'ai rencontré "Impossible de trouver un storyboard nommé MainStoryboard ....",

J'ai résolu ce problème en suivant les étapes ci-dessous:

  1. Renommer "MainStoryboard.storyboard" en "MainStoryboard_1.storyboard"
  2. Ouvrez le fichier "$ your_app $ -Info.plist" situé dans le dossier "Supporting Files". Modifiez "Nom de base du fichier de storyboard principal" en "MainStoryboard_1.storyboard".
  3. Réexécutez l'application et cela a fonctionné pour moi.
  4. J'ai renommé mon fichier de storyboard en son "MainStoryboard.storyboard" d'origine.
  5. Modification du fichier .plist dans son état d'origine.
  6. Réexécutez l'application et cela a fonctionné pour moi.

Pour une raison quelconque, le fichier "MainStoryboard.storyboard" n'a pas été reconnu après avoir forcé la fermeture de Xcode et les étapes ci-dessus ont permis à l'application de reconnaître à nouveau le fichier.

J'espère que cette solution vous aidera ..

76
Sushma Satish

Je veux juste mentionner le scénario que j'ai rencontré. Je ne sais pas comment, mais le storyboard s'est déconnecté de la cible bien qu'il fasse toujours partie du projet. Pour résoudre ce problème, j'ai ouvert le storyboard, sélectionné "Inspecteur de fichiers" (icône la plus à gauche sur le panneau de droite) et vérifiez le projet sous "Adhésion cible". J'espère que cela aide quelqu'un.

24
Ilya K.

Le problème se produit lorsque vous désélectionnez "Utiliser l'internationalisation de base" et exécutez le simulateur dans des paramètres régionaux différents plutôt que votre localisation spécifique.

Par exemple, vous spécifiez une localisation zh-CN dans la configuration du projet mais exécutez le simulateur sous en-US.

9
Igotit

J'ai essayé toutes les solutions mentionnées ci-dessus mais n'a pas fonctionné.

Après une recherche approfondie a trouvé le coupable:

La ressource de bundle de copie manquait dans TARGETS -> Phases de construction

Cela a été accidentellement supprimé lors de la suppression des Cocoapods.

Voici les étapes pour résoudre ce problème:

  1. Accédez à TARGETS de votre projet
  2. Cliquez sur plus (+) button présent dans le coin supérieur gauche
  3. Sélectionnez New Copy Bundle Resources dans le menu déroulant
  4. Maintenant, ajoutez-vous Storyboard files (Main, Launchscreen etc). Ajoutez également le dossier Assets. Vous pouvez ajouter ces fichiers en cliquant sur le bouton plus (+) présent en bas

screenshot

  1. Supprimez le derived data content
  2. Delete the app depuis Simulator/Device et relancez
6
Jayprakash Dubey

Cela m'a aidé (Swift 2.1, Xcode 7.2) pour une application avec une barre d'onglets

    let storyboard: UIStoryboard = UIStoryboard(name:"Main",bundle: NSBundle(forClass: self.dynamicType))
    let tabController = storyboard.instantiateViewControllerWithIdentifier("MyTabBarIdentifier") as! UITabBarController

J'avais le Main.storyboard avec l'adhésion cible correcte, les ressources de bundle de copie, le dossier de construction nettoyé, etc. (la plupart des réponses pointaient vers cela).

4
Nitin Alabur

Je pensais que vous aviez peut-être supprimé le storyboard et décidé d'utiliser un fichier .xib lors du lancement initial de l'application. Dans ce scénario, Xcode essaierait de trouver un storyboard inexistant.

Pour ce cas, cliquez sur le projet> Info> Custom iOS Target Properties et supprimez cette paire de valeurs clés: Main storyboard file base name

4
Venkatesh G

Si vous utilisez pour la navigation sur le code source, essayez d'utiliser le code ci-dessous

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

Souvent, les gens entrent "Main.storyboard" pour le nom, car c'est littéralement le nom du fichier, mais pour les besoins du codage Obj-C, "X.storyboard" a le nom "X", donc dans ce cas, @"Principale".

3
abdul sathar

Nitin Alabur la réponse m'a aidé, mais indirectement. Publier une autre réponse pour clarifier:

Je crée un cadre dynamique avec un story-board à l'intérieur, et dans l'application de test que je construis pour tester le cadre, j'obtenais cette erreur.

Mon code ressemblait à ceci:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];

J'ignorais les trucs de NSBundle parce que, hé, je ne sais pas ce qu'est un paquet. Il s'avère que c'est important pour ce cas d'utilisation, où le storyboard existera en dehors du "bundle" de l'application (il est à la place dans le bundle de mon framework). Ce code dira à iOS de trouver le storyboard dans le bundle dans lequel la classe actuelle existe (qui est pour moi le bundle qui contient mon framework):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
3
manroe

J'ai également eu le même problème, ce qui a provoqué ce type d'exception est que j'avais écrit "Main.storyboard" au lieu de "Main". Nous n'avons pas besoin de spécifier l'extension .storyboard.

3
Waaheeda

Un simple nettoyage a corrigé l'erreur pour moi.

3

Accédez à votre projet, sélectionnez votre cible et déroulez les menus pour resélectionner vos storyboards.

De plus, vous pouvez mettre à jour votre liste, j'ai trouvé que changer l'un ne changeait pas l'autre.

2
Raymond Jones

Il vous suffit de vérifier votre fichier de configuration (.plist) en dessous de Supporting files dossier

Vérifiez le nom de votre storyboard par défaut.

2
Gabox

Ce problème s'est produit pour moi lorsque j'appelais le storyboard dans le code. La raison en était que j'utilisais un autre 'Word' pour le storyboard.

Allez dans Cibles -> info, sélectionnez info, copiez le nom du storyboard et collez-le à l'endroit où vous appelez storyboard.

Essayez au moins….

1
Suraj K Thomas

Cela m'est arrivé quand j'avais une application précédente avec le même nom installée sur le simulateur.

J'ai supprimé l'application précédente, resélectionné le Storyboard dans les "Informations de déploiement", relancé l'application et tout s'est bien passé.

1
josetapadas

J'ai eu ce problème lorsque j'ai accidentellement ouvert un projet avec une deuxième installation de Xcode. Il a cassé mes fichiers de projet de façon permanente (ce qui est compréhensible).

1
John Sjölander

Pour éviter que cela ne se produise, j'ai dû changer ma façon de travailler avec les fichiers de storyboard. Après avoir édité le storyboard, enregistrez le fichier puis quittez XCode. Cela semble empêcher le problème de se produire.

1
Aaron Havens

Un très stupide mais j'avais "MainStoryboard.storyboard" dans l'entrée "Nom de la base de fichier du storyboard principal (iPad)" de mon mon .plist au lieu de simplement "MainStoryboard".

0
lorenzo

Il y a 2 possibilités,

  1. Assurez-vous que votre Storyboard est ajouté à votre cible.

Select Storyboard > Go to file inspector (first right tab) > Check Target Membership

enter image description here

  1. Initialisez le storyboard avec le bon bundle.

    • Si le storyboard est dans la même cible sur laquelle vous travaillez, utilisez bundle = nil
    • Si le storyboard est dans une cible différente de celle sur laquelle vous travaillez, essayez de suivre le code pour initialiser le bundle et le storyboard.

      let bundle = Bundle(for: MyClass.self)
      let storyboard = UIStoryboard(name: "Main", bundle: bundle)
      
0
Zaid Pathan

J'ai eu cette erreur sur l'appareil lorsque j'ai ajouté environ 150 polices à UIAppFonts.
Après avoir réduit leur nombre à environ 100, il a disparu.

0
Dan Abramov

La solution pour moi était que j'avais juste besoin d'ajouter le MainStoryboard aux Bundle Resources . Après cela, cela fonctionne très bien.

Projet -> Build Phases -> Copy Bundle Resources -> cliquez sur le bouton + et ajoutez votre fichier.

Accédez à votre info.plist sur Build Phases> Copy Bundle Resources et ajoutez votre storyboard en utilisant l'icône "+"

0
Angel Guevara

J'ai eu ce problème dans un projet qui avait des storyboards avec et sans les suffixes ~ iPad ou ~ iPhone, comme MainStoryboard.storyboard et MainStoryboard ~ iPad.storyboard.

Le problème était que MainStoryboard.storyboard remplaçait MainStoryboard ~ iPad.storyboard quand il a été compilé dans le répertoire de construction. Si les fichiers étaient compilés dans l'ordre inverse, les deux seraient conservés sans problème. Je ne sais pas pourquoi cela se produit.

Pour contourner ce problème, vous pouvez cesser d'utiliser les suffixes ~ iPad/iPhone ou vous assurer que les fichiers sont dans le bon ordre lors de la phase de copie des ressources de l'ensemble.

(Utilisation de XCode6.2beta2)

0
akiraspeirs

Si vous avez récemment réinitialisé votre carte SIM iOS aux paramètres par défaut, il est également utile de vérifier les paramètres régionaux dans ses Préférences. Je travaille sur l'application avec le russe comme seul paramètre régional et après la réinitialisation de la carte SIM, le xCode s'est arrêté pour démarrer l'application car les paramètres régionaux de la carte SIM étaient définis sur l'anglais.

0
Arseniy

J'ai eu un problème similaire et j'obtenais l'erreur suivante.

 exception 'NSInvalidArgumentException', raison: 'Impossible de trouver un storyboard nommé' MainStoryboard_iPhone 'dans le bundle NSBundle 

Je l'ai corrigé en mettant à jour le fichier plist. Allez simplement dans Edition-> Rechercher-> Rechercher dans Workspace et recherchez "histoire". Mettez à jour le nom approprié pour le story-board.

0
Gajen Sunthara

Dans mon cas, c'était un storyboard à l'intérieur d'un cadre pour une application Mac. J'utilisais:

let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)

et nécessaire d'utiliser l'identifiant de bundle du framework pour obtenir le bundle correct:

let storyboard = NSStoryboard(name: "StoryboardName",
                            bundle: Bundle(identifier: "com.company.FrameworkName"))
0
Andrew