2016-08-14 4 views
0

Я попытался использовать контроллер просмотра навигации и настроить свой экран в качестве начального контроллера представления с помощью раскадровки, и все прошло хорошо.Инициализация контроллера представления в качестве контроллера начального представления при использовании навигационного контроллера? [Objective-C]

Но когда я сделал все, что программно, как показано ниже в моем файле appDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName: @"Main" bundle:nil]; 

    FirstViewController *firstVC = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"]; 


    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC]; 


    self.window =[[[UIApplication sharedApplication]delegate] window]; 

    self.window.rootViewController = navController; 

    return YES; 
} 
  • Мой экран на тренажере является пустым.

  • Но когда я проверил is initial view controller для соответствующего контроллера представления в раскадровке и запустил. На этот раз он сработал, и отобразится ожидаемый экран.

Мой вопрос, почему я должен проверить is initial view controller в раскадровке, когда я делаю все программно?.

спасибо.

ответ

1

Если вы собираетесь создать первый контроллер просмотра самостоятельно в didFinishLaunchingWithOptions, вам необходимо создать экземпляр UIWindow. Но ваше задание self.window просто извлекает себя (LOL) и ничего не делает. Вы бы вообще сделать что-то вроде:

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

При использовании опции «первоначальный вид контроллера», он берет на себя все это для вас, поэтому это работает, когда вы проверяете эту опцию.

И не забудьте makeKeyAndVisible:

[self.window makeKeyAndVisible]; 

Таким образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *firstVC = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC]; 

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

    return YES; 
} 
+0

Благодаря это работает. Но я получаю сообщение «Не удалось создать экземпляр контроллера представления по умолчанию для UIMainStoryboardFile« Main »- возможно, назначенная точка входа не установлена? « – AK1

+1

Похоже, вы указали «Основной интерфейс» в целевых настройках. Если вы создаете экземпляр первой сцены, вы не должны указывать раскадровку в «Главном интерфейсе». – Rob

+0

Как вы уже сказали, я пробовал не указывать «Основной интерфейс», и когда я забегаю, на этот раз симулятор показывает мне пустой экран. Сообщение отсутствует. – AK1

Смежные вопросы