应用程序应具有根视图控制器控制台

时间:2011-11-18 23:47:55

标签: objective-c ios xcode console

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

  

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

15 个答案:

答案 0 :(得分:54)

您应该替换

[window addSubview:tabBarController.view];

[self.window setRootViewController:tabBarController];

也许您使用“空应用”构建了项目,但忘记在rootViewController中设置didFinishLaunchingWithOptions(存在于 AppDelegate.m )。

但是,如果使用“单一视图应用程序”或其他类型构建项目,项目默认情况下会rootViewController通过xib设置(可能是项目中的 MainWindow.xib

答案 1 :(得分:13)

在将一个故事板添加到“空”项目后,我在iOS 5上遇到了同样的问题。事实证明我必须删除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;
}

答案 2 :(得分:6)

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

答案 3 :(得分:4)

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

答案 4 :(得分:3)

尝试使用self.window代替window(如果您的设置windowsynthesized @synthesize window=_window;,则<{1}}:

- (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在下面的评论中说的那样。修复后的答案如下:Applications are expected to have a root view controller at the end of application launch - 将UIAlertView方法从-(void)viewDidLoad移到-(void)viewDidAppear:(BOOL)animated }

答案 5 :(得分:2)

另一个原因:

我在IB中将文件所有者附加到一个新的小ImageView,我将其拖到View上。我没有在.h文件中将其称为IBOutlet,因此当我按住Ctrl键拖动它时,新的Imageview未被列为可能的连接。小黑框中显示的唯一可能是View。我必须在不经意间点击。我做了一些更改然后运行程序并得到根控制器错误。修复程序将文件所有者重新连接到xib-IB屏幕中的底部视图。

答案 6 :(得分:2)

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

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

始终选择初始控制器(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文件。如果没有名为&#34;主故事板文件基本名称&#34;的密钥,则必须手动添加它并将其值设置为故事板文件的名称(不带扩展名)。

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

答案 7 :(得分:1)

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

[self.window makeKeyAndVisible];

来自我的代码。希望这有助于某人!

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

我通过确保在

之后调用创建和显示这些警报/弹出窗口/操作表的任何函数来修复它
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[someObject functionthatDisplayAlerts];

答案 10 :(得分:1)

我知道这篇文章很老但我今天遇到了这个帖子。

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

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

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

我不确定这是否会对其他人有所帮助,但如果您使用界面构建器来创建mainWindow并完成了委托之间的所有链接,请确保在应用程序中没有以下代码:didFinishLaunching。 ..

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

在删除上述行之前,我遇到了同样的错误。希望有所帮助!

编辑:执行上述操作现在我的viewControllers viewDidAppear方法被调用了两次?

答案 13 :(得分:0)

如果您正在使用Storyboard,但创建了一个空项目,则可能忘记将主故事板设置为项目摘要标签中的* .storyboard文件设置。它帮助我解决了这个问题。

答案 14 :(得分:0)

如果你是从一个空的开始,你必须对你的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;

}