ios:在导航控制器中管理某些viewcontroller

ios:在导航控制器中管理某些viewcontroller,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,在我的应用程序中,我需要管理一个导航控制器并将其移动到这些ViewController中,所以我会这样做 UINavigationController *navController = (UINavigationController*) [self.storyboard instantiateViewControllerWithIdentifier:@"navigationcontroller"]; [navController addChildViewController:firstV

在我的应用程序中,我需要管理一个导航控制器并将其移动到这些ViewController中,所以我会这样做

UINavigationController *navController = (UINavigationController*) [self.storyboard instantiateViewControllerWithIdentifier:@"navigationcontroller"];
    [navController addChildViewController:firstViewController];
    [navController addChildViewController:secondViewController];
    [navController addChildViewController:thirdViewController];
    [navController addChildViewController:fourthViewController];
[self presentViewController:navController animated:YES completion:nil];
第一个问题:导航在first fourthviewcontroller打开,为什么

第二个问题:如果首先从secondviewcontroller执行此操作以通过:

[[self navigationController] pushViewController:self.navigationController.viewControllers[0] animated:NO];
我有一次车祸说:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Pushing the same view controller instance more than once is not supported
为什么??你能帮我吗?

第一个问题 您正在将四个视图控制器推送到导航堆栈上。因此,在每个步骤之后,堆栈如下所示:

[navController addChildViewController:firstViewController];
堆栈:
firstViewController

[navController addChildViewController:secondViewController];
[navController addChildViewController:thirdViewController];
堆栈:
secondViewController
firstViewController

[navController addChildViewController:secondViewController];
[navController addChildViewController:thirdViewController];
堆栈:
thirdViewController
secondViewController
firstViewController

[navController addChildViewController:secondViewController];
[navController addChildViewController:thirdViewController];
你可以在这里看到图案。换句话说,之所以显示
fourthViewController
,是因为它位于堆栈的顶部

第二个问题
至于第二个问题,您不能将视图控制器推送到堆栈中已经存在的堆栈上<代码>[[self-navigationController]pushViewController:self.navigationController.ViewController[0]动画:否]似乎很荒谬。您试图将堆栈中的某些内容推送到堆栈中。

第一个问题

每次使用“addChildViewController:”时,都会在堆栈顶部添加新的控制器。最后插入的第四个视图控制器位于堆栈的顶部,因此在调用该方法时会显示它

[self presentViewController:navController animated:YES completion:nil];
第二个问题

它取决于pushViewController:方法本身。在报告中,该文件说:

添加的viewController不能是选项卡栏控制器的实例,并且它必须不在导航堆栈上


您的应用程序崩溃,因为self.navigationController.viewControllers[0]已在导航堆栈上。

UINavigationController
具有属性
@property(非原子,复制)NSArray*viewControllers
。为什么不使用它呢?嗯,好的,我使用它,但我有同样的问题…并且要移动到另一个viewcontroller?我可以用pop吗?你可以根据需要推或弹出。像这样把一堆视图控制器排成一行是很奇怪的。