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



当我运行应用程序时,我在控制台中得到一条消息,上面写着:

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

我从别人那里听说这与didFinishLaunchingWithOptions方法有关

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

方法的代码:

- (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];

也许你用'空应用程序'构建你的项目,忘记在你的didFinishLaunchingWithOptions中设置rootViewController(它存在于你的AppDelegate.m)。

但是,如果您使用'单视图应用程序'或其他类型构建项目,该项目将默认通过xib设置rootViewController(可能是主窗口)。xib(在项目中)。

我在iOS 5中也遇到了同样的问题,即在一个"空"项目中添加了故事板。我需要删除AppDelegate中的所有行。

设置值为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;
}

如果您有主窗口。xib,确保在Target的摘要中将Main Interface设置为MainWindow。

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

尝试使用self.window而不是window(如果您的设置有windowsynthesized@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;
}

第二种可能性:

In your main。我要确保最后一个参数是App Delegate的名称。在您的例子中,它看起来应该是:

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

解决方案:

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

另一个原因:

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

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

当你这样做的时候,你必须确保3个主要的事情:

始终选择您的初始控制器(TabBarcontroller或NavigationController)作为Storyboard中的初始视图

修改Appdelegate中的代码。

- (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文件。如果没有名为"Main storyboard file base name"的键,您必须手动添加它并将其值设置为故事板文件的名称(不带扩展名)。

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

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

[self.window makeKeyAndVisible];

从我的代码。希望这对大家有所帮助!

我在storyboard的根视图控制器中将两个outlet分配给"view"。右键单击"视图控制器",确保只有一个"视图"。

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

我通过确保创建和显示这些警报/弹出窗口/动作表的任何函数都在

之后调用来修复它
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[someObject functionthatDisplayAlerts];

我知道这篇文章很老了,但是我今天偶然看到了。

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

假设我们不应该这样做,因为我把它注释掉了,错误消失了。我删除了注释,错误又出现了。

应用程序没有崩溃,我只是得到了记录错误。

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

我不确定这是否会对其他人有所帮助,但是如果你已经使用了interface builder来创建mainWindow,并且已经完成了委托之间的所有链接,请确保你在应用程序中没有以下代码:

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

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

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

如果你正在使用故事板,但创建了一个空项目,你可能忘记设置主故事板到你的*。在您的项目设置中的Summary选项卡中的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;
}

最新更新