Ios 弹出RootViewController

Ios 弹出RootViewController,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我正在开发一个应用程序,作为第一个viewcontroller,它有一个UIViewController。 此控制器推送包含其他控制器的NavigationViewController。 现在我需要弹出NavigationController的RootViewController以返回到初始UIViewController。 我试过了 [self dismissViewControllerAnimated:YES completion:nil]; [self.navigationControl

我正在开发一个应用程序,作为第一个viewcontroller,它有一个UIViewController。 此控制器推送包含其他控制器的NavigationViewController。 现在我需要弹出NavigationController的RootViewController以返回到初始UIViewController。 我试过了

[self dismissViewControllerAnimated:YES completion:nil];
[self.navigationController popViewControllerAnimated:YES];
应用程序崩溃(“Tread1:EXC_BAD_ACCESS(code=1,address=……”)。 我试过了

[self dismissViewControllerAnimated:YES completion:nil];
[self.navigationController popViewControllerAnimated:YES];
什么也没发生

最初的UIViewController调用

 [self performSegueWithIdentifier:@"MyIdentifier" sender:self];
在UIBuilder中,segue的类型为“Show(如Push)”

然后我有一个NavigationViewcontroller,它包含RootViewController和另一个Viewcontroller。 我试图实现的是从RootViewController返回到第一个viewcontroller(navigationcontroller之外的那个)。所以我应该把导航控制器放在那里


我遗漏了什么?

显然,我还有几个手势识别器,导致应用程序崩溃。 正确的方法是:

[self dismissViewControllerAnimated:YES completion:nil];

什么也不发生的原因是,无论是谁,都没有导航控制器。您与错误的视图控制器对话。这里的问题是,您需要以良好的顺序展开视图控制器的整个“堆栈”;您可能需要不止一个命令。。。不幸的是,您的问题没有描述您的实际完整视图控制器集,因此无法进一步提供帮助。我认为您需要查看视图控制器层次结构。如果没有自己的导航控制器,UIViewController如何“推送”UINavigationController?您最好将UINavigationController显示为模式控制器。您可以尝试,[self.navigationController PoptorootViewController激活:是];你能告诉我你是怎么推导航控制器的吗?尝试以下操作时:[self.navigationController pushViewController:testNavigationController动画:否]将引发此异常“不支持推送导航控制器”。只有在初始UIViewController位于导航控制器中时,才可能推送视图控制器。在这种情况下,您已经在另一个导航控制器的视图层次结构中推送了一个导航控制器。因此,您可以调用self.navigationController.navigationController来访问主导航控制器。尝试使用[self.navigationController.navigationController poptrootviewcontrolleranimated:YES]