ios - 为什么我无法在我的 AppDelegate 中以编程方式更改我的初始 View Controller ?

标签 ios objective-c cocoa-touch uistoryboard appdelegate

我正在听从 this question 的建议为了在运行时定义我的初始 View Controller ,而不是总是基于 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”。

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

最佳答案

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

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

当您的 info.plist 中有“主 Storyboard 基本名称”条目时,会为您创建该窗口,但如果您删除了该条目,则您必须自己创建窗口。

关于ios - 为什么我无法在我的 AppDelegate 中以编程方式更改我的初始 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074649/

相关文章:

iphone - 数据未保存到核心数据

iphone - 自动布局无法按预期工作

ios - 如何在 Firebase 中检索自动生成的 ID/ key ?

ios - 如何通过向上/向下滚动使 iOS 应用程序背景发生变化

javascript - 如何在 iOS 应用程序中通过 websockets 实现和通信?

ios - 覆盖 iOS 上的 "Look Up"菜单项

objective-c - 如何将 View 的框架转置到它的 super View 中?

iOS UISlider - 更改价格值

ios - 如何在调用 dealloc 后停止运行该 block ? IOS

ios - 禁用与 UIBarButtonItem 的用户交互