为啥我无法在 AppDelegate 中以编程方式更改我的初始视图控制器?

Posted

技术标签:

【中文标题】为啥我无法在 AppDelegate 中以编程方式更改我的初始视图控制器?【英文标题】:Why am I unable to change my initial view controller programmatically in my AppDelegate?为什么我无法在 AppDelegate 中以编程方式更改我的初始视图控制器? 【发布时间】:2014-04-15 04:25:16 【问题描述】:

我遵循this question 的建议,以便在运行时定义我的初始视图控制器,而不是根据 Storyboard 属性始终保持相同。

这是我的didFinishLaunching 方法:

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

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UINavigationController *compactNavigationController = [mainStoryboard instantiateViewControllerWithIdentifier:@"CompactNavigationController"];
    self.window.rootViewController = compactNavigationController;
    [self.window makeKeyAndVisible];

    CompactPostsViewController *controller = (CompactPostsViewController *)compactNavigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;

    return YES;

并且我在我的 Storyboard 中取消选中“Is Initial View Controller”,并从我的应用信息中的默认 Storyboard 中删除了“Main”。

但是当我启动应用程序时,我得到一个完全黑屏。我做错了什么?

【问题讨论】:

【参考方案1】:

您的窗口为零,因为您从未创建过它。你需要添加这一行,

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

当您在 info.plist 中有“主故事板基本名称”条目时,将为您创建窗口,但如果您删除它,则您必须自己创建窗口。

【讨论】:

【参考方案2】:

检查故事板中的链接(通过右键单击 tableview 控制器)。这主要发生在您未正确链接 tableview 控制器时。

【讨论】:

以上是关于为啥我无法在 AppDelegate 中以编程方式更改我的初始视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

在 AppDelegate 中以编程方式设置 App 入口点

为啥我不能在 react native 中以编程方式添加道具?

为啥在集合视图单元格中以编程方式创建的按钮需要是惰性变量?

无法在 WebView(网页)中以编程方式单击按钮

无法在 UITableViewCell 中以编程方式创建的 UIButton 上设置图像

无法在 List ForEach 中以编程方式激活 NavigationLink