J'obtiens l'erreur suivante dans ma console:
Les applications devraient avoir un contrôleur de vue racine à la fin du lancement de l'application
Voici ma application:didFinishLaunchWithOptions
méthode:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Dans Interface Builder, le UITabBarController
délégué de est connecté au délégué d'application.
Quelqu'un sait comment résoudre ce problème?
ios
objective-c
ArtSabintsev
la source
la source
Réponses:
J'ai eu le même problème. Vérifiez votre main.m. Le dernier argument doit être défini sur le nom de la classe qui implémente le protocole UIApplicationDelegate.
la source
NSStringFromClass
. C'est ainsi que Xcode crée maintenant le fichier main.m. Par exemple:#import "AppDelegate.h
puisint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
self.window
est initialisé commeself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Remplacer dans AppDelegate
à
la source
addSubview
ligne faisait partie du modèle de projet sur une première version du SDK Xcode / iOS. Si l'application remonte à loin, vous pouvez l'avoir même si vous ne l'avez pas écrite.J'ai eu la même erreur en essayant de changer le premier contrôleur de vue chargé dans
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Au début, je ne savais pas vraiment d'où venait l'erreur, alors je l'ai réduite et j'ai découvert ce qui n'allait pas. Il s'avère que j'essayais de changer l'affichage d'une vue avant qu'elle n'apparaisse réellement à l'écran. La solution était donc de déplacer ce code dans le viewcontroller qui me posait des problèmes
- (void)viewDidLoad
à
- (void)viewDidAppear:(BOOL)animated
et l'erreur a cessé d'apparaître. Mon problème a été spécifiquement causé en faisant un
UIAlertView
spectacle.Dans votre cas, je vous suggère de vérifier le code dans le contrôleur de vue actif de tabBarController (car il s'agit probablement d'un problème dans ce contrôleur de vue). Si cela ne fonctionne pas, essayez de définir les paramètres de départ dans le fichier nib au lieu de dans le code - ou si vous voulez le faire dans le code, essayez de déplacer le code vers la méthode appropriée de tabBarController active viewcontroller.
Bonne chance!
la source
viewDidLoad:
(sans ajouter d'indicateur), et je ne devrais pas avoir à le faire. Quoi qu'il en soit, merci pour la suggestion!viewDidLoad
pour beaucoup de choses, en configurant toutes les choses pour la première fois, comme l'ajout de données auUITableView
. Je ne peux pas le déplacerviewDidAppear:
car je ne veux qu'il se déclenche qu'une seule fois.Je l'ai obtenu en commençant par le modèle "Application vide" et en ajoutant manuellement un XIB. Je l'ai résolu en définissant le nom principal de Nib comme suggéré par Sunny. L'étape manquante dans ce scénario est la suppression
de
Comme il va écraser l'instance de votre fenêtre créée dans le fichier Xib. Cela suppose que vous avez créé un ViewController et que vous l'avez câblé avec votre fenêtre et votre délégué d'application dans le fichier XIB.
la source
Cela m'est arrivé. Résolu en modifiant le fichier .plist. Spécifiez le nom de base du fichier nib principal. (Doit être MainWindow.xib). J'espère que cela vous aidera.
la source
J'ai rencontré le même problème récemment, lors de la construction d'un projet avec ios5 sdk. Au début, il se construisait et fonctionnait correctement, mais après cela, l'erreur est apparue.
Dans mon cas, la solution était plutôt simple.
Ce qui manquait, c'était que l' interface principale propriété de l' dans l'onglet récapitulatif de ma cible d'application avait été effacée. J'ai donc dû le régler à nouveau.
Si ce n'est pas le cas, et si tabBarController est toujours nul, vous pouvez toujours créer par programmation votre fenêtre et votre contrôleur racine. En guise de solution de rechange, j'ai ajouté le code suivant à mon projet
Cela ne fonctionnera que si la solution de sho est également implémentée.
la source
J'ai mis à niveau vers iOS9 et j'ai commencé à obtenir cette erreur de nulle part. J'ai pu le réparer mais en ajoutant le code ci-dessous à
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
la source
Aucune des suggestions ci-dessus n'a résolu mon problème. La mienne était la suivante:
Ajouter:
après:
dans mon appdelegate
la source
la source
makeKeyAndVisible
cela ne résout pas le problème. SEULEMENT cela a résolu l'avertissement pour moi. MERCI!Storyboard
aussicomment ajouter un RootViewController pour iOS5
si votre application n'a pas utilisé de RootViewController jusqu'à présent, créez-en un;) en cliquant sur Fichier> Nouveau> Nouveau fichier; sélectionnez le
UIViewController subclass
nommer RootViewController , décochez l'interface With XIB pour l'utilisateur (en supposant que vous en avez déjà un) et placez ce code dans votre AppDelegate :: didFinishLaunchingWithOptionspour sûr - vous devez importer RootViewController.h et créer la variable
voici un bel article sur le RootViewController et l'AppDelegate,
la source
J'ai également eu cette erreur, mais contrairement à l'une des réponses précédemment énumérées, la mienne était parce que j'avais décommenté la méthode 'loadView' dans mon contrôleur nouvellement généré (xcode 4.2, ios5).
Il m'a même dit que la méthode était pour créer la vue par programme mais je l'ai manquée car elle ressemblait tellement à d'autres méthodes comme viewDidLoad que j'utilise normalement, je ne l'ai pas capturée.
Pour résoudre, supprimez simplement cette méthode si vous ne créez pas par programme la hiérarchie des vues, à l'aide de nib ou du storyboard.
la source
j'ai aussi eu ces problèmes. j'ai fait exécuter mon projet dans xcode4.2.1. j'ai lu tous les commentaires là-haut, mais personne n'est cool pour moi. après un certain temps, je trouve que j'ai commenté un morceau de code.
alors je l'ai commenté. tout va bien pour moi. j'espère que cela vous sera utile.
la source
Assurez-vous d'avoir cette fonction dans votre délégué d'application.
Assurez-vous que didFinishLaunchingWithOptions renvoie OUI. Si vous supprimez la ligne 'return YES', cela provoquera l'erreur. Cette erreur peut être particulièrement courante avec les utilisateurs du storyboard.
la source
Avec ma première vue,
MenuViewController
j'ai ajouté:sur la méthode App Delegate:
Ça a marché.
la source
Il y avait un léger changement autour d'iOS 5.0 ou plus, vous obligeant à avoir un contrôleur de vue racine. Si votre code est basé sur un exemple de code plus ancien, tel que GLES2Sample , aucun contrôleur de vue racine n'a été créé dans ces exemples de code.
Pour corriger (ce GLES2Sample, par exemple), directement
applicationDidFinishLaunching
, je crée un contrôleur de vue racine et y attache ma glView.Cela fait disparaître l'avertissement et n'affecte pas vraiment votre application autrement.
la source
Essayez de connecter IBOutlet du contrôleur de barre d'onglets à la vue racine dans Interface Builder au lieu de
Mais en fait, je n'ai jamais vu une telle erreur auparavant.
la source
J'ai résolu le problème en procédant comme suit (aucune des autres solutions ci-dessus n'a aidé):
Dans le menu déroulant associé à "Interface principale", sélectionnez une autre entrée, puis resélectionnez "MainWindow" puis reconstruisez.
la source
Je suis tombé sur le même problème mais j'utilisais
storyboard
Affecter mon
storyboard
InitialViewController
à ma fenêtrerootViewController
.Dans
et cela a résolu le problème.
la source
J'ai commencé à avoir ce même problème juste après la mise à niveau vers Xcode 4.3, et uniquement lors du démarrage d'un projet à partir de zéro (c'est-à-dire créer un projet vide, puis créer un UIViewController, puis créer un fichier nib séparé).
Après avoir mis TOUTES les lignes auxquelles j'étais habitué et m'être assuré d'avoir les bonnes connexions, j'ai continué à obtenir cette erreur, et le fichier nib que j'essayais de charger via le contrôleur de vue (qui a été défini comme rootController) ne s'est jamais affiché dans le simulateur.
J'ai créé un modèle de vue unique via Xcode et je l'ai comparé à mon code et j'ai finalement trouvé le problème!
Xcode 4.3 semble ajouter par défaut la méthode - (void) loadView; à la section de mise en œuvre du contrôleur de vue. Après avoir lu attentivement les commentaires à l'intérieur, il est devenu clair quel était le problème. Le commentaire indiquait de remplacer la méthode loadView si vous créez une vue par programme (et je paraphrase), sinon de ne PAS remplacer loadView si vous utilisez une pointe. Il n'y avait rien d'autre à l'intérieur de cette méthode, donc en fait, je remplaçais la méthode (et je ne fais rien) EN UTILISANT un fichier nib, ce qui a donné l'erreur.
La SOLUTION consistait soit à supprimer complètement la méthode loadView de la section d'implémentation, soit à appeler la méthode parente en ajoutant [super loadView].
Le supprimer serait préférable si vous utilisez un fichier NIB car l'ajout de tout autre code le remplacera en fait.
la source
J'ai eu ce même message d'erreur dans le journal. J'ai eu un pop-up UIAlertView dans l'application: didFinishLaunchingWithOptions. Je l'ai résolu en retardant l'appel à l'alerteView pour laisser le temps au contrôleur de vue racine de terminer le chargement.
En application: didFinishLaunchingWithOptions:
qui appelle après 1 seconde:
la source
J'ai eu le même problème. Si vous construisez une application basée sur une fenêtre "à partir de zéro" comme je l'étais, vous devrez faire ce qui suit: (notez que ce sont des étapes pour Xcode 4.2.)
0. Assurez-vous que votre délégué d'application est conforme au protocole UIApplicationDelegate.
Par exemple, supposons que notre délégué s'appelle MyAppDelegate. Dans MyAppDelegate.h, nous devrions avoir quelque chose comme ceci:
1. Spécifiez le délégué d'application dans main.m
Par exemple,
2. Créez un fichier d'interface de fenêtre principale.
Pour ce faire, cliquez avec le bouton droit sur votre projet et choisissez Nouveau fichier. De là, choisissez Fenêtre dans la section iOS -> Interface utilisateur.
Après avoir ajouté le fichier à votre projet, accédez au résumé du projet (cliquez avec le bouton gauche de la souris sur le projet; cliquez sur le résumé). Sous iPhone / iPod Deployment Info (et la section iPad correspondante si vous le souhaitez) et sélectionnez votre nouveau fichier d'interface dans le " Zone de liste déroulante Interface principale ".
3. Accrochez le tout dans l'éditeur d'interface
Sélectionnez votre fichier d'interface dans la liste des fichiers pour faire apparaître l'éditeur d'interface.
Assurez-vous que le volet Utilitaires est ouvert.
Ajoutez un nouvel objet en faisant glisser un objet de la liste Objets du volet Utilitaires vers l'espace au-dessus ou en dessous de votre objet Window. Sélectionnez l'objet. Cliquez sur l'inspecteur d'identité dans le volet Utilitaires. Remplacez la classe par le délégué de l'application (MyAppDelegate, dans cet exemple.)
Ouvrez l'inspecteur de connexions pour MyAppDelegate. Connectez la sortie de fenêtre à la fenêtre qui existe déjà dans le fichier d'interface.
Cliquez sur le propriétaire du fichier sur la gauche, puis cliquez sur l'inspecteur d'identité dans le volet Utilitaires. Changez la classe en
UIApplication
Ouvrez l'inspecteur de connexions pour le propriétaire du fichier. Connectez la sortie délégué à l'objet MyAppDelegate.
4. Enfin, et c'est très important, cliquez sur l'objet Window dans le fichier d'interface. Ouvrez l'inspecteur des attributs. Assurez-vous que "Visible au lancement" est coché.
C'est tout ce que j'avais à faire pour que ça marche pour moi. Bonne chance!
la source
Si vous utilisez MTStatusBarOverlay, vous obtiendrez cette erreur.
MTStatusBarOverlay crée une fenêtre supplémentaire (fenêtres [[UIApplication sharedApplication]) qui n'a pas de contrôleur racine.
Cela ne semble pas poser de problème.
la source
Reçu la même erreur après avoir remplacé mon interface utilisateur par un Storyboard, en utilisant XCode 4.6.3 et iOS 6.1
Résolu en effaçant tout le code de didFinishLaucnhingWithOptions dans l'AppDelegate
la source
OrdoDei a donné une réponse correcte et valable. J'ajoute cette réponse uniquement pour donner un exemple d'une
didFinishLaunchingWithOptions
méthode qui utilise sa réponse et tient compte des commentaires des autres concernant le contrôleur de navigation.la source
Cela m'est arrivé parce que j'ai commenté par inadvertance:
de
la source
J'ai pu définir le contrôleur de vue initial sur l'écran de résumé de xcode.
Cliquez sur le nom du projet le plus haut dans l'explorateur de fichiers de gauche (il devrait avoir une petite icône de plan). Dans la colonne centrale, cliquez sur le nom de votre projet sous «CIBLES» (il devrait avoir une petite icône «A» au crayon à côté). Regardez sous «iPhone / iPod Deployment Info» et recherchez «Main Interface». Vous devriez pouvoir sélectionner une option dans le menu déroulant.
la source
En plus de la réponse "sho", c'est correct (le quatrième paramètre de UIApplicationMain devrait être le nom du contrôleur principal), j'ajoute quelques commentaires.
J'ai récemment changé le «modèle» d'une de mes applications en utilisant MainWindow.xib pour construire une fenêtre par programmation. L'application a utilisé un modèle plus ancien qui créait automatiquement MainWindow. Étant donné que je souhaitais prendre en charge une autre vue de contrôleur XIB pour iPhone 5, il est plus facile de choisir le bon XIB par programmation lors de la création du délégué d'application. J'ai également supprimé MainWindow.xib du projet.
Le problème était, j'ai oublié de remplir le quatrième paramètre dans UIApplication main et j'ai OUBLIÉ DE SUPPRIMER MainWindow de "Interface principale" au Résumé du projet.
Cela a provoqué un GRAND problème: cela a rendu l'avertissement inoffensif "Les applications devraient ..." sur les appareils de développement, mais quand il est allé sur l'App Store, il s'est cassé sur les téléphones grand public, se bloquant parce que MainWindow n'était plus dans le bundle! J'ai dû demander une révision accélérée du correctif.
Un autre symptôme est que parfois un bloc blanc, comme une UIView vierge, apparaissait parfois lorsque les paramètres étaient modifiés et que l'application était mise au premier plan. Dans l'iPhone 5, il était clair qu'il s'agissait d'un bloc de 320 x 480. Peut-être que la MainWindow manquante était en cours de création en mode développement, en utilisant l'ancienne taille. Je venais de trouver ce bogue lorsque les premiers rapports du crash ont atteint la boîte de réception.
L'installation de l'application à partir de l'App Store au lieu de XCode a montré que l'application s'est effectivement bloquée, et le problème MainWindow s'est révélé dans le journal, donc je pouvais voir qu'il ne s'agissait pas d'une combinaison spéciale d'appareils + versions IOS.
la source
Pour ajouter à la réponse de Mike Flynn, depuis la mise à niveau vers Xcode 7 et l'exécution de mon application sur un appareil iOS 9, j'ai ajouté ceci à mon
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
la source
Ce problème se produit lorsque vous n'avez pas configuré Interface Builder correctement.
Assurez-vous que la fenêtre de votre délégué d'application et les prises viewController sont connectées:
Dans votre MainWindow.xib, maintenez le contrôle, cliquez sur Délégué d'application et faites-le glisser vers l'objet Window. Sélectionnez la fenêtre. Maintenez le contrôle et sélectionnez à nouveau le délégué de l'application, faites-le glisser vers votre contrôleur de vue racine et sélectionnez viewController.
la source
Cette erreur apparaît également lorsque le propriétaire du fichier de MainWindow.xib n'est pas défini correctement.
Le propriétaire du fichier est UIApplication
-> objet inséré de la classe déléguée de l'application avec la sortie de fenêtre connectée à la fenêtre
la source