应用程序窗口应该有一个根视图控制器抛出警告

时间:2013-12-20 06:28:52

标签: ios objective-c viewdidload

我收到此警告“应用程序在应用程序启动结束时应该有一个根视图控制器”。我已经阅读了所有其他答案,我知道它为什么这样做,但我不知道如何解决它。

我的viewDidLoad中有以下代码导致错误

//animated header that displays errors over status bar
self.dropdown = [[UIWindow alloc] initWithFrame:CGRectMake(0, -20, 320, 20)];
self.dropdown.backgroundColor = [UIColor redColor];
self.label = [[UILabel alloc] initWithFrame:self.dropdown.bounds];
self.label.textAlignment = NSTextAlignmentCenter;
self.label.font = [UIFont systemFontOfSize:12];
self.label.backgroundColor = [UIColor clearColor];
[self.dropdown addSubview:self.label];
self.dropdown.windowLevel = UIWindowLevelStatusBar;
[self.dropdown makeKeyAndVisible];
[self.dropdown resignKeyWindow];

//needed to hide empty cells at the end of table view.
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

如果我将该代码放在viewWillAppear中,我就不会收到错误。问题是我不想要那里。我希望它在视图中加载所以它只运行一次。我可以忽略该警告,还是可以在我的应用代理中手动设置root或其他内容。我真的想保持它在视图中加载。我正在使用故事板。

由于

2 个答案:

答案 0 :(得分:1)

问题是您没有将任何视图控制器指定为您创建的窗口的根视图控制器。

设置如下:

self.dropdown.rootViewController = yourViewController;

<强>建议:

不要在应用程序中使用多个窗口。最好只在应用程序中使用一个窗口以及多个视图控制器和视图。我在职业生涯中看到了一个问题,问题是我的一位同事使用了多个窗口来显示不同的内容而不是视图控制器,没有正确处理应用程序在一分钟内崩溃了10次!!!。

答案 1 :(得分:0)

我不知道为什么在故事板创建根视图控制器(对于主窗口)时添加这样的另一个窗口会导致此错误,但是您可以通过将所有代码移动到单独的方法来抑制它从viewDidLoad稍微延迟调用它(使用performSelector:withObject:afterDelay :)。