我在控制台得到以下错误:

应用程序在启动结束时应该有一个根视图控制器

下面是我的应用程序:didFinishLaunchWithOptions方法:

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

在Interface Builder中,UITabBarController的委托被连接到App委托。

有人知道怎么解决这个问题吗?


当前回答

选择你的“窗口”在你的Nib文件 在“属性检查器”中选择“启动时可见”

手动创建nib文件时会发生这种情况。 这个修复工作于常规的nib模式-不是故事板模式

其他回答

我在Xcode 4中将一个旧的EAGLView示例项目迁移到新的GLKView示例项目中,没有一个解决方案适合我。最后我意识到我试图设置主GLKViewController的自我。视图指向Interface Builder中的嵌套GLKView。

当我指向自我时。视图回到根GLKView在接口生成器,我的应用程序能够启动没有一个错误消息(所以确保你的视图控制器的视图被设置为根视图)。

附注:如果你想让一个嵌套的GLKView工作,创建一个新的成员变量,如self。并将其连接拖到Interface Builder中嵌套的GLKView。然后确保拖动self。glkSubview的委托给文件的所有者。您必须手动调用[self。glkView:(glkView *)视图drawwinrect:(CGRect)rect"如果你有setNeedsDisplay关闭的glkView。

这发生在我身上。通过编辑.plist文件解决。 指定Main nib文件基名。(应该是MainWindow.xib)。 希望这能有所帮助。

以上建议没有一个能解决我的问题。我的回答是:

Add:

window.rootViewController = navigationController;

后:

[window addSubview:navigationController.view];

在我的appdelegate中

- (void)applicationDidFinishLaunching:(UIApplication *)application {

我也有这个问题。我让我的项目在xcode4.2.1中运行。我已经看了上面所有的评论,但没有人对我来说很酷。过了一会儿,我发现我注释了一段代码。

//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

然后我取消了评论。我一切都好。 希望这对你们有帮助。

我最近在用ios5 sdk构建一个项目时遇到了同样的问题。 起初,它是构建和运行正常的,但在那之后,错误出现了。 对我来说,解决办法相当简单。 所缺少的是,我的应用程序目标的摘要选项卡中的主界面属性被擦除了。所以我需要重新设置。

如果这不是重点,如果tabBarController仍然是nil,你总是可以通过编程方式创建你的窗口和根控制器。 作为备用方案,我将以下代码添加到我的项目中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
    if (!window && !navigationController) {
        NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        UIViewController *viewController1, *viewController2;
        viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
        viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

        self.tabBarController = [[[UITabBarController alloc] init] autorelease];
        self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
        self.window.rootViewController = self.tabBarController;

    }
    else {
        [window addSubview:[tabBarController view]];
    }
    [self.window makeKeyAndVisible];
    return YES;
}

只有当sho的解决方案也被实现时,这才会起作用。