Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序窗口应具有根视图控制器引发警告_Ios_Objective C_Viewdidload - Fatal编程技术网

Ios 应用程序窗口应具有根视图控制器引发警告

Ios 应用程序窗口应具有根视图控制器引发警告,ios,objective-c,viewdidload,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.background

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

我的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];
如果我把代码放在viewwillbeen中,我不会得到错误。问题是我不想把它放在那里。我希望它在视图中加载,因此它只运行一次。我可以忽略警告吗,或者我可以在我的应用程序委托或其他东西中手动设置根目录吗。我真的很想把它放在眼里。我在用故事板


感谢

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

只需将其设置为:

self.dropdown.rootViewController = yourViewController;

建议:


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

您没有将任何视图控制器指定为您创建的窗口的根视图控制器显示您的应用程序委派的
didfishlaunchingwithoptions
方法。@midhunMP,就是这样!非常感谢,我不知道我是怎么错过的。你可以继续添加它作为答案,我会接受。我将新窗口的根视图控制器设置为self(我的视图控制器),它似乎可以修复它。@Stonep123,我想这是可行的,但我不知道让同一个控制器成为两个不同窗口的根视图控制器是否是一件好事。也许没关系,只是看起来有点奇怪。我以前没有用过选择器,你能解释一下,如果我把所有的设置代码都放在方法中,我会如何调用performSelectorMethod(void)headerSetup@Stonep123,[self-performSelector:@selector(createDropdown),对象:nil afterDelay:0.1];然后将代码移动到一个名为createDropdown的新方法。我已经尝试过了,但要让这个视图在状态栏上向下动画化,唯一的方法似乎是这样做,使用一个单独的窗口。@Stonep123:然后确保处理得很好。