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

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

下面是我的应用程序: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委托。

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


当前回答

我也有这个错误,但没有答案已经列出是解决我的问题。 在我的例子中,日志显示是因为我在另一个子线程中分配了应用程序根视图控制器。

-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions
{
    ...
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        ...
        dispatch_async(dispatch_get_main_queue(), ^{
            ...
            [self updateTabBarTitles];
            self.window.rootViewController = self.tabBarController;
            ...
        });
    });

    [self.window makeKeyAndVisible];
    return YES;
}

通过将rootViewController分配移动到函数的末尾—就在调用makeKeyAndVisible之前:—将导致日志消息不再显示。

{
    ...
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

我希望这能有所帮助。

其他回答

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

当我尝试改变加载的第一个视图控制器时,我有同样的错误

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

一开始我不知道错误到底从哪里来,所以我缩小了范围,找出了问题所在。结果是我试图在视图显示在屏幕上之前改变视图的显示。因此,解决方案是在视图控制器中移动这段代码,这给我带来了麻烦

- (void) viewDidLoad

to

- (void) viewDidAppear: (BOOL)动画

错误不再出现。我的问题是由制作一个UIAlertView显示引起的。

在你的情况下,我建议你检查在tabBarController的活动视图控制器的代码(因为它可能是一个问题在那个视图控制器)。 如果这不起作用,试着在nib文件中而不是在代码中设置起始设置——或者如果你想在代码中做,试着将代码移动到tabBarController的活动视图控制器的适当方法。

好运!

我得到这个错误(应用程序预计在应用程序启动结束时有一个根视图控制器),我正在以编程方式创建视图控制器。

通过确保我的根视图控制器中的loadView方法调用[super loadView]来解决这个问题。

没有一个答案能完全解决我的问题。

我正在开发一个升级到ARC的旧iOS4项目,现在正在为iOS 7开发Xcode 5

我通读了所有这些文件,并开始检查我的配置和代码。

为我修复它的是添加

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

除了有

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

我没有

-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions

在得到错误之前。

在“sho”答案的顶部,这是正确的(UIApplicationMain的第四个参数应该是主控制器的名称),我添加了一些注释。

我最近改变了我的一个应用程序的“模型”使用主窗口。Xib以编程方式构造窗口。该应用程序使用了一个较旧的模板,自动创建了主窗口。因为我想为iPhone 5支持不同的控制器视图XIB,所以在创建App Delegate时,通过编程方式选择正确的XIB更容易。我删除了主窗口。Xib项目以及。

问题是,我忘记在UIApplication main中填充第四个参数,我忘记在项目摘要中从“主界面”中删除主窗口。

这导致了一个大问题:它在开发设备上呈现了无害的警告“应用程序预计会……”,但当它进入App Store时,它在消费者手机上崩溃了,因为MainWindow不再在捆绑包中!我不得不请求对漏洞修复进行快速审查。

另一个症状是,当设置被更改,应用程序被放在前台时,有时会出现一个白色块,比如一个空白的UIView。在iPhone 5中,很明显它是320x480块。也许丢失的主窗口是在开发模式下创建的,使用旧的大小。当第一个崩溃报告到达收件箱时,我刚刚发现了这个错误。

从app Store安装而不是从XCode安装,结果显示应用确实崩溃了,主窗口问题也在日志中暴露出来,所以我可以看出这不是设备+IOS版本的特殊组合。