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

时间:2014-04-15 04:25:17

标签: ios objective-c cocoa-touch uistoryboard appdelegate

我遵循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;
}

我已经取消选中"是初始视图控制器"在我的故事板中,我已经删除了" Main"来自我应用的信息中的默认故事板。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

检查故事板中的链接(右键单击tableview控制器)。这种情况主要发生在你没有正确链接你的tableview控制器时。