【问题标题】:Cannot set root view controller无法设置根视图控制器
【发布时间】:2014-08-15 13:51:26
【问题描述】:

我不断收到警告

Application windows are expected to have a root view controller at the end of application launch

我一直在寻找解决方案,但我找到的所有解决方案都与我的代码匹配。 在此先感谢它可能很简单,但我已经坚持了一段时间了。

AppDelegate.m

self.rootController = [[UITabBarController alloc] init];

DownloadTableView *view2 = [[DownloadTableView alloc] init];
view2 = [[UIStoryboard storyboardWithName:@"DownloadTableView" bundle:nil] instantiateViewControllerWithIdentifier:@"Download"];

TableViewController *view3 = [[TableViewController alloc] init];
view3 = [[UIStoryboard storyboardWithName:@"TableViewController" bundle:nil] instantiateViewControllerWithIdentifier:@"table"];

appWebView = [[WebViewController alloc] init];

view3.tabBarItem.title = @"Documents";
appWebView.title = @"Browser";
view2.title = @"Downloads";

self.rootController.viewControllers = [NSArray arrayWithObjects:appWebView, view2, view3,  nil];
self.window.rootViewController = _rootController; 

appWebView.tabBarItem.image = [UIImage imageNamed:@"Browser.png"];
view2.tabBarItem.image = [UIImage imageNamed:@"Download.png"];

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// [_window addSubview:_rootController.view];
[_window makeKeyAndVisible];

【问题讨论】:

  • 你用上面的代码实现了哪种方法?为什么要设置根视图控制器两次?为什么在将控制器的视图设置为根控制器后不必要地将其添加为子视图(请参阅rootViewController 的文档)?
  • 我清理了代码并编辑了我的帖子,但仍然收到警告
  • 现在你创建一个新窗口,从不设置它的根视图控制器,然后让它成为关键窗口。这会警告您尚未设置根视图控制器,这不足为奇。

标签: ios xcode view uiviewcontroller storyboard


【解决方案1】:

几行似乎是多余的,这可能会导致问题,指出 o -

self.rootController = [[UITabBarController alloc] init];

DownloadTableView *view2 = [[DownloadTableView alloc] init];
view2 = [[UIStoryboard storyboardWithName:@"DownloadTableView" bundle:nil] instantiateViewControllerWithIdentifier:@"Download"];

TableViewController *view3 = [[TableViewController alloc] init];
view3 = [[UIStoryboard storyboardWithName:@"TableViewController" bundle:nil] instantiateViewControllerWithIdentifier:@"table"];

view3.tabBarItem.title = @"Documents";

appWebView = [[WebViewController alloc] init];
appWebView.title = @"Browser";
appWebView.tabBarItem.title = @"Browser";

view2.title = @"Downloads";
self.rootController.viewControllers = [NSArray arrayWithObjects:appWebView, view2, view3,  nil];

self.window.rootViewController = self.rootController; <-----

appWebView.tabBarItem.image = [UIImage imageNamed:@"Browser.png"];
view2.tabBarItem.image = [UIImage imageNamed:@"Download.png"];

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[_window addSubview:_rootController.view]; <-------
[_window makeKeyAndVisible];

【讨论】:

【解决方案2】:

是否调用了所有这些代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法? _window 字段是否连接到 window 属性?

附:还有很多无用和怪异的台词。

【讨论】:

  • 是的,这一切都在 didFinishLaunchingWithOptions @property (readwrite, strong, nonatomic) UIWindow *window;在标题中
【解决方案3】:

今早醒来就知道了

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

没有必要并且与标签栏冲突

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多