Сбой контроллера модального представления

У меня есть три вида внутри прокрутки. Я добавил их с помощью следующего кода;

[self.scrollView addSubview:[aViewController view]];

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

    MyVC *vc = [[MyVC alloc] initWithNibName:@"VC" bundle:nil];
self.navController.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
self.navController.viewControllers = [NSArray arrayWithObject:vc];
[vc release];
[self presentModalViewController:self.navController animated:YES];

И сбой, который я получаю: завершающееся приложение из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Попытка начать модальный переход от к, когда переход уже выполняется. Подождите, пока viewDidAppear / viewDidDisappear узнает, что текущий переход завершен '

Любая помощь будет принята с благодарностью.


person John S    schedule 21.09.2011    source источник
comment
Добавление представления контроллера представления непосредственно в качестве подпредставления не является хорошей практикой. Контроллеры представления предназначены для представления, передачи и т. Д. Соответствующими контроллерами представления контейнера, чтобы они сами могли управлять своими представлениями. Прямое извлечение представлений часто может привести к утечке памяти.   -  person CIFilter    schedule 21.09.2011


Ответы (2)


Вы не можете представить текущий контроллер навигации. Представьте вместо этого свой MyVC viewcontroller

MyVC *vc = [[MyVC alloc] initWithNibName:@"VC" bundle:nil];
vc.modalPresentationStyle = UIModalPresentationFormSheet;
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self
presentModalViewController:vc animated:YES]; 
[vc release];

Вы также можете создать новую иерархию контроллеров представления, передать их новому контроллеру навигации и представить его.

person beryllium    schedule 21.09.2011
comment
Вы можете, это способ получить контроллер навигации в модальном представлении, я уже делал это раньше. Но в этом случае я просто не получаю ошибку. - person John S; 21.09.2011

Вы не должны пытаться представить контроллер навигации контроллера представления изнутри. Вместо этого создайте новый контроллер навигации для вашего контроллера модального представления:

MyVC *vc = [[MyVC alloc] initWithNibName:@"VC" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
navigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentModalViewController:navigationController animated:YES];
[vc release];
person CIFilter    schedule 21.09.2011