Почему я не могу программно изменить исходный контроллер представления в своем AppDelegate?

Я следую совету этого вопроса, чтобы определить мой начальный контроллер представления во время выполнения, вместо того, чтобы всегда быть одинаковым на основе свойства 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;
}

И я снял флажок «Исходный контроллер представления» в своей раскадровке и удалил «Основной» из раскадровки по умолчанию в информации о моем приложении.

Но когда я запускаю приложение, я получаю полностью черный экран. Что я делаю не так?


person Doug Smith    schedule 15.04.2014    source источник


Ответы (2)


Ваше окно равно нулю, потому что вы никогда его не создавали. Вам нужно добавить эту строку,

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

Окно создается для вас, когда у вас есть запись «Основное имя базы раскадровки» в вашем info.plist, но если вы удалите ее, вам придется создать окно самостоятельно.

person rdelmar    schedule 15.04.2014

проверьте свои ссылки в раскадровке (щелкнув правой кнопкой мыши на контроллере tableview). Это происходит в основном, когда вы неправильно связали свой контроллер tableview.

person Rudra    schedule 15.04.2014