应用程序有望拥有一个根视图控制器控制台

当我运行我的应用程序时,在控制台中收到消息:

2011-11-16 19:17:41.292 Juice [8674:707]应用程序预计在应用程序启动结束时会有一个根视图控制器

我从别人那里得知,这与didFinishLaunchingWithOptions方法有关

如果有人有任何build议,为什么我得到这个错误,将不胜感激。

我的代码为方法:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [window addSubview:tabBarController.view]; [window makeKeyAndVisible]; [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; return YES; } 

你应该更换

 [window addSubview:tabBarController.view]; 

 [self.window setRootViewController:tabBarController]; 

也许你用“ Empty Application ”构build了你的项目,忘记在你的didFinishLaunchingWithOptions (它存在于你的AppDelegate.m中 )中设置rootViewController

但是,如果使用“ 单一视图应用程序 ”或其他types构build项目,则项目将默认通过xib设置rootViewController (可能是项目中的MainWindow.xib )。

在向“空”项目添加故事板之后,我在iOS 5上遇到了同样的问题。 事实certificate,我不得不删除AppDelegate.m中的所有行,将值设置为self.window

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. //self.window.backgroundColor = [UIColor whiteColor]; //[self.window makeKeyAndVisible]; return YES; } 

如果您有MainWindow.xib,请确保您将Target的摘要中的主界面设置为MainWindow。

我得到这个错误的方式Applications are expected to have a root view controller at the end of application launch消失,是为了确保我的根视图控制器中的loadView方法正在调用[super loadView] 。 希望这有助于某人。

尝试使用self.window而不是window (如果您的设置window正在synthesized类似@synthesize window=_window; ):

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.  [self.window addSubview:tabBarController.view];  [self.window makeKeyAndVisible];  [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];  return YES; } 

第二可能性:

在你的main.m中,确保最后一个参数是App Delegate的名字。 在你的情况,它看起来应该是:

 retVal = UIApplicationMain(argc, argv, nil, @"JuiceAppDelegate"); 

解:

正如@ marcus13在下面的评论中所说的。这是固定的在这个答案中find答案: 应用程序预计在应用程序启动结束时有一个根视图控制器 – 通过将UIAlertView方法从-(void)viewDidLoad-(void)viewDidAppear:(BOOL)animated

另一个原因:

我是在IB附加文件所有者到一个新的小ImageView我拖到视图。 我没有在.h文件中将它称为IBOutlet,所以当我按住Ctrl拖动它时,新的Imageview没有被列为可能的连接。 显示在黑色小盒子里的唯一可能性是View。 我一定是无意的点了点头。 我做了一些改变,然后运行程序,得到了根控制器错误。 修复重新连接文件所有者到xib – IB屏幕的底部视图。

我从头开始构build一个新项目时遇到了这个问题。 我添加了一个StoryBoard,并构build我的整个界面,但我没有select一个模板。

当这样做的时候,你必须确定三件主要的事情:

始终select您的初始控制器(TabBarcontroller或NavigationController)作为您的故事板中的初始视图。

改变你的Appdelegate.m中的代码

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; } 

对此

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; } 

检查你的[ProjectName] -Info.plist文件。 如果没有键名为“主故事板文件基本名称”,则必须手动添加它,并将其值设置为故事板文件的名称(不带扩展名)。

我完成所有这些步骤后,我的应用程序运行完美。

我也有同样的问题。 我所得到的只是一个黑屏。 原来我无意中删除了:

 [self.window makeKeyAndVisible]; 

从我的代码。 希望这可以帮助别人!

我在故事板的根视图控制器中分配了两个“视图”。 右键单击“视图控制器”,并确保只有一个“视图”。

我在开发使用sqlite数据库的应用程序时也遇到了同样的错误。 当db文件传输失败时,我显示了alertView。 这是一个错误,因为没有任何rootViewController设置,你不能显示任何popovers / alertview / action!

我通过确保任何创build并显示这些警报/popup/动作表的函数在之后被调用来修复它

 self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; [someObject functionthatDisplayAlerts]; 

我知道这个post很老,但我今天遇到了这个。

这是因为我在didFinishLaunchingWithOptions中创build了一个UIAlertView

假设那么我们不应该这样做,因为我评论了它,错误消失了。 我删除了我的意见,错误又回来了。

该应用程序不会崩溃,我只是得到logging错误。

我的应用程序有同样的问题。 它出现了,当我添加另一个视图控制器到我的项目,并试图将其设置为AppDelegate中的根视图控制器。 我尝试了几个解决scheme,但没有一个可以解决这个问题。 最后,我find了原因:我有两个本地化版本的MainWindow.xib文件(一个用于德语,另一个用于英语本地化)。 所以我删除了英文文件,并在MainView.xib中重新连接了IBOutlets。 这解决了这个问题。

我不知道这是否会帮助其他人,但如果你已经使用接口生成器来创build你的主窗口,并完成委托之间的所有链接,请确保你没有在应用程序中的以下代码:didFinishLaunching …

 [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] 

我有同样的错误,直到我删除了上面的行。 希望有所帮助!

编辑:做上面现在我的viewControllers viewDidAppear方法被调用两次?

如果您正在使用Storyboard,但创build了一个空的项目,则可能忘记将Main Storyboard设置到项目设置的“ 摘要”选项卡中的* .storyboard文件中。 它帮助我解决了这个问题。

如果你是从一个空的开始,你必须做这个除了你的AppDelegate.m文件,“指向”窗口的rootViewController( self.window.rootViewController = [[[ViewControllerName alloc] initWithNibName:@"ViewControllerName" bundle:nil] autorelease];

像这样:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = [[[ViewControllerName alloc] initWithNibName:@"ViewControllerName" bundle:nil] autorelease]; [self.window makeKeyAndVisible]; return YES; }