self.navigationController является нулевым после того, как это назначено как RootViewController? - PullRequest
2 голосов
/ 11 августа 2011

Я создал новый проект xcode как приложение на основе View, и у меня есть набор UIViewController, который я планирую использовать внутри отдельных UINavigationController (s).

В ParentViewController.m до того, как все UINavigationController (s) и после того, как все myViewControllers были инициированы:

NSMutableArray *navControllers = [[NSMutableArray array];
for (id aVC in self.myViewControllers) {
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];

    //[aVC setNavigationController:navController];
    [navController setNavigationBarHidden:YES];
    [navController setToolbarHidden:YES];
    [navControllers addObject:navController];
    [navController release];
}

_navigationControllers = [[NSArray arrayWithArray:navigationControllers] retain];

_navigationControllers сохраняется как член ParentViewController, поэтому я предполагаю, что все мои контроллеры навигации, инициированные внутри, for-цикл хранится _navigationControllers, поэтому он не будет освобожден или станет nil, но когда я пытаюсь использовать navigationController в MyViewController для нажатия SomeOtherViewController, он не работает:

- (IBAction)pushDetailView {
     [self.navigationController pushViewController:self.detailViewController animated:YES];
}

Я ставлю точку останова перед pushViewController:someOtherViewController и "po [self navigationController]", консоль говорит мне, что это ссылка nil.

Я предполагал, что когда я делаю [[UINavigationController alloc] initWithRootViewController:aVC], базовыймеханизм назначит navigationController как aVC.navigationController, потому что Apple "View Controller Programming Guide для iOS" делает то же самое, не назначая navigationController для rootController.

Если я не отмечу вторую строкуfor-loop //[aVC setNavigationController:navController];, navigationController не существует в AVC.

Я неправильно понимаюмеханизм?Есть ли другое решение для моего случая?Заранее спасибо!

1 Ответ

0 голосов
/ 15 апреля 2013
_navigationControllers = [NSMutableArray array];
for (id aVC in self.myViewControllers) {
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];

    //[aVC setNavigationController:navController];
    [navController setNavigationBarHidden:YES];
    [navController setToolbarHidden:YES];
    [navControllers addObject:navController];
}

// assuming index 0 navigation controller is with 'ParentViewController'
self.rootViewController = [_navigationControllers objectAtIndex:0];

уточните это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...