Я столкнулся с проблемой, когда UIViewController.navigationController
становится nil
, и я отчаянно пытаюсь найти ответ на этот вопрос.
UINavigationController
получает настройку в делегате приложения:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootView" bundle:nil];
UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:self.rootViewController];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
Когда появляется RootViewController
, устанавливается элемент self.navigationController
, и я могу использовать его, чтобы скрыть панель навигации, например:
- (void)viewWillAppear:(BOOL)animated {
NSLog( @"self = %@, self.navigationController = %@", self, self.navigationController );
[self.navigationController setNavigationBarHidden:YES animated:NO];
}
Выходные данные отладки показывают значения дляself
и self.navigationController
.
При нажатии кнопки в этом контроллере, self
остается тем же значением, но self.navigationController
теперь nil
:
- (IBAction)buttonClicked:(id)sender {
NSLog( @"self = %@, self.navigationController = %@", self, self.navigationController );
// here, self.navigationController is nil, so
// [self.navigationController pushViewController:...] doesn't work :-(
}
Я видел десятки вопросов, касающихся этой проблемы, и всегда был ответ, что UIViewController
не является частью UINavigationController
.Поскольку доступ к navigationController
в viewWillAppear
работает нормально, я считаю, что должно происходить что-то еще.У вас есть какие-либо указатели?Я с радостью предоставлю более подробную информацию, если это необходимо.