web-dev-qa-db-fra.com

iOS 7 - Échec d'instanciation du contrôleur de vue par défaut

J'utilise Xcode 5 dans une application nouvellement créée et lorsque je viens de le créer, je clique sur le bouton Exécuter et clique dessus. Le projet est alors généré mais ne s'affiche pas dans le simulateur iOS et le message suivant s'affiche:

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

Bien sûr, j'ai googlé à ce sujet et tout le monde souligne que cela se produit car XCode ne sait pas encore quel contrôleur de vue est le contrôleur initial. Mais ce qui est étrange, c’est que j’ai créé l’application en tant qu’application basée sur la page (également essayé d’applications à affichage unique et à onglets) et XCode avait déjà défini un Storyboard.

De plus, lorsque je choisis l'option d'interface principale du projet, le storyboard (nommé "Main" par Xcode lui-même) est défini et, dans le Storyboard, mon contrôleur de vue est défini en tant que "Contrôleur de vue initiale".

enter image description here

Qu'est-ce qui ne va pas?

88
rodrigoalves

Donc, cela m'est aussi arrivé. J'ai vérifié 50 fois et mon "contrôleur de vue initial est" a été vérifié, croyez-moi. C'est arrivé à l'improviste. Alors, comment ai-je résolu le problème?

  1. Créez un nouveau storyboard dans votre projet, nommez-le ainsi: Main_iPhoneV2 (ou iPadV2 en fonction de votre style de storyboard d'origine).
  2. Ouvrez le storyboard brisé, cliquez n'importe où dans la zone blanche et appuyez sur commande-a, puis commande-c (tout sélectionner et copier)
  3. Ouvrez votre nouveau storyboard et appuyez sur commande-v pour coller la même configuration exacte
  4. Allez dans les paramètres de votre projet, remplacez votre "Interface principale" par la nouvelle Main_iPhoneV2 (Si c'est votre iPad et que vous écrivez une application universelle, vous devrez éditer le fichier -Info.plist et rechercher la valeur "Fichier de storyboard principal nom de base (iPad)
  5. Recompilez et arrêtez de tirer vos cheveux
53
Ryna

Vérifiez Is Initial View Controller dans l'inspecteur d'attributs.

enter image description here

299
Ashvin Ajadiya

Cliquez d'abord sur le contrôleur de vue dans le côté droit tilitaires barre. Ensuite, sélectionnez Inspecteur d'attributs et assurez-vous que la case Le contrôleur de vue initial est-il est cochée!

39
Andy

Utilisation d'Interface Builder:

Vérifiez si ' est le contrôleur de vue initial ' est défini. Vous pouvez le définir en utilisant les étapes ci-dessous:

  1. Sélectionnez votre contrôleur de vue (qui doit apparaître comme écran initial).
  2. Sélectionnez Inspecteur d'attributs dans la fenêtre Utilitaires .
  3. Sélectionnez ' est le contrôleur de vue initial ' dans la section du contrôleur de vue (si ce n'est pas le cas).

Si vous avez effectué cette étape et que vous obtenez toujours une erreur, alors uncheck and do it again.

Steps to solve problem

Utilisation par programmation:

Objective-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

rapide:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true
14
Jayprakash Dubey

Cet avertissement est également signalé si vous avez du code tel que:

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = myAwesomeRootViewController
    window?.makeKeyAndVisible()

Dans ce cas, accédez à la première page des paramètres de cible et définissez Main Interface sur vide, car vous n'avez pas besoin d'une entrée de storyboard pour votre application.

13
superarts.org

Configurer la fenêtre manuellement,

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!application.keyWindow.rootViewController) 
     {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];

         application.keyWindow.rootViewController = myViewController;
     }
}
10
Shamsudheen TK

J'ai expérimenté cela avec mon contrôleur de barre d'onglets n'apparaissant pas dans le simulateur avec un écran noir. J'ai procédé comme suit pour que mon application apparaisse dans le simulateur.

  1. Allez à Main.storyboard.
  2. Vérifiez le Is Initial View Controller sous l'onglet Inspecteur d'attributs.

Is Initial View Controller in the Attributes Inspector.

9
Cons Bulaquena

Je reçois cette erreur lorsque je change le nom du fichier de storyboard "Main.storyboard" TO: "XXX.storyboard"

La solution pour moi était:

  • Produit-> Nettoyer
  • MODIFICATION: Fichiers de support -> info.plist -> Nom de la base du fichier du storyboard -> Principal TO: XXX

Bonne chance

5
Hovanes Mosoyan

enter image description here

En plus de la réponse correcte ci-dessus, assurez-vous également que vous avez défini l'interface principale correcte dans Général.

3
Naren

Le produit "propre" était la solution pour moi.

3
Walter Schurter

Si vous avez ajouté un nouveau storyboard, vous devez vérifier les points suivants.

1) Dans votre fichier de liste de contrôle, la valeur de est le nom principal de la base de fichier du storyboard (iPad) ou (iPhone). ) doit correspondre au nom de fichier de votre storyboard (, n’ajoutez pas d’extension . storyboard )

2) Dans le storyboard, il devrait y avoir un seul contrôleur de vue qui soit défini comme . C'est le contrôleur de vue initial

3) Nettoyez et construisez votre projet. :)

enter image description here

2
Sachin Nikumbh

Si vous avez régulièrement engagé votre code dans le contrôle de source, vous éviterez ainsi la création d'un nouveau Storyboard et, éventuellement, de nouveaux problèmes ...

J'ai pu résoudre ce problème en comparant le code source Git de la version qui fonctionnait contre celui qui avait été cassé. Le diff a montré que la première ligne devrait contenir l'ID du contrôleur de vue initial, dans mon cas, initialViewController = "Q7U-eo-vxw" . J'ai cherché dans le code source pour être sûr que l'identifiant existait. Tout ce que je devais faire était de le remettre et tout fonctionnait à nouveau!

<document type="com.Apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
    <dependencies>
        <deployment defaultVersion="1296" identifier="iOS"/>
        <plugIn identifier="com.Apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
    </dependencies>
    <scenes>

Voici quelques étapes qui peuvent vous aider à résoudre:

  1. Cliquez avec le bouton droit sur le storyboard défaillant et utilisez Contrôle de la source> Valider ... pour conserver vos modifications depuis le dernier commit.
  2. Essayez de cliquer avec le bouton droit de la souris sur votre storyboard défaillant et utilisez "Ouvrir en tant que> Code source" pour afficher le code XML du storyboard.
  3. Dans l'élément document , recherchez l'attribut nommé "initialViewController". S'il manque, ne vous inquiétez pas, nous allons y remédier. Si tel est le cas, double-cliquez sur l'id qui lui est affecté, appuyez sur commande-c pour le copier, puis sur commande -f commande-v pour le rechercher plus en profondeur dans le document. C'est l'identifiant du contrôleur qui devrait fournir la vue initiale. S'il n'est pas défini dans le document, c'est un problème - vous devez le supprimer de la balise de document, dans mon cas initialViewController = "Q7U-eo-vxw" .
  4. Accédez à l'élément de menu Xcode appelé View et choisissez Editeur de version> Afficher la vue de comparaison.
  5. Cela montre votre version locale à gauche et la version historique à droite. Cliquez sur la date sous la version historique pour obtenir une liste des commits pour ce story board. Choisissez celui que vous savez travailler et comparez l'élément document. Quel est l'id du * initialViewController? Est-ce différent? Si c'est le cas, essayez de le ré-éditer manuellement et en cours d'exécution. xcode historical compare tool in action
1
neoscribe

Vérifiez si vous avez la fenêtre var dans le AppDelegate.

var window: UIWindow? 

Et aussi vérifier le storyboard de votre fichier Info.plist.

<key>UIMainStoryboardFile</key>
<string>Main</string>

La configuration par programme de rootViewController dans AppDelegate ne résoudra pas l'avertissement. Vous devez choisir si vous souhaitez laisser le storyboard définir le contrôleur de vue ou le faire par programme.

0
rockdaswift