Приложение с вложенным UINavigationController вылетает в iOS SDK 4.2 - PullRequest
1 голос
/ 31 января 2011

Я в процессе миграции приложения на текущий iOS SDK.Его корневой контроллер - UINavigationController с другим UINavigationController в качестве контроллера первого вида.

Приложение теперь аварийно завершает работу с EXC_BAD_ACCESS, вызванным какой-то бесконечной рекурсией, но я не могу понять трассировку треков,Насколько я могу судить, ничего не изменилось, ожидайте, что некоторые настройки проекта скомпилируют его в текущем SDK.

Я создал новое приложение на основе навигации и добавил вложенный UINavigationController, что также привело к сбою приложения.Является ли вложение UINavigationController s вообще плохой идеей?

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

Ответы [ 3 ]

3 голосов
/ 31 января 2011

Это будет работать, когда вы устанавливаете панель навигации родительского контроллера навигации в скрытое (в конструкторе интерфейса или в коде) перед загрузкой представления:

navigationController.navigationBar.hidden = YES;
[self.window addSubview:navigationController.view];
1 голос
/ 31 января 2011

Ну, кажется странным иметь вложенный UINavigationController, но, черт возьми, что я знаю.Что такое корневой контроллер представления вложенного контроллера nav?Надеюсь, не самый лучший навигационный контроллер.

0 голосов
/ 27 апреля 2012

Вот оно:

  1. Создайте новый UINavigationController
  2. В viewDidLoad или viewWillLoad alloc и инициализируйте контроллер с тем корневым каталогом, который вы хотите
  3. Измените размер представления NavigationController и добавьте его как подпредставление к представлению родительского viewCOntroller (у меня есть self.contentView)

BOOM !!

вот код ..

- (void)viewDidLoad
{
[super viewDidLoad];
[self.contentView setFrame:CGRectMake(0, 0, self.contentView.bounds.size.width, self.contentView.bounds.size.height)];

mNavController =[[UINavigationController alloc]initWithRootViewController:myNestedRootController]; /
[self.mNavController.view setFrame:CGRectMake(0, 0, self.contentView.bounds.size.width, self.contentView.bounds.size.height)];
[self.mNavController setNavigationBarHidden:YES]; //optional
[self.contentView addSubview:self.mNavController.view];
}

На самом деле вы можете пропустить contentView и иметь представление mNavController's непосредственно на viewcontroller's view (мой плохой)

У меня есть метод, чтобы выдвинуть (только подтолкнуть) новый VC

-(void)moveToContentViewController:(PM_BaseContentVC *)contentvc animated:(BOOL)animated{
[self.mNavController popToRootViewControllerAnimated:NO]; //silently pop the previous viewcontroller
[self.mNavController pushViewController:contentvc animated:YES]; //push new viewcontrolelr
[self.contentView addSubview:self.mNavController.view]; //add the view
}

приветствия и оптимизации приветствуются:)

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