iOS:如何在现有UINavigationController中打开另一个UINavigationController?

iOS:如何在现有UINavigationController中打开另一个UINavigationController?,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我正面临以下代码的崩溃。情况是 这是我的应用程序委托方法,在该方法中,我使用UINavigationController加载RTC_HomeVC - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScre

我正面临以下代码的崩溃。情况是

这是我的应用程序委托方法,在该方法中,我使用UINavigationController加载RTC_HomeVC

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
RTC_HomeVC *obj_RTC_HomeVC=[[RTC_HomeVC alloc]init];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:obj_RTC_HomeVC];
// Override point for customization after application launch.
self.window.rootViewController=nav;
[obj_RTC_HomeVC release];
[nav release];

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
现在,我想在父导航控制器中打开UINavigationController。所以我使用下面的代码。方法-(iAction)调用\u SectionFlow在RTC\u HomeVC中



当我调用此方法时,应用程序崩溃。这是坠机日志

事故日志: *由于未捕获的异常“UIViewControllerHierarchyConsistency”而终止应用程序,原因:“子视图控制器:应具有父视图控制器:,但实际父视图控制器:” *第一次抛出调用堆栈: (0x1c9c012 0x10d9e7e 0x1c9bdeb 0x6838a 0x68739 0x6f5a3 0x67eed 0x4fc3 0x10ed705 0x24920 0x248b8 0xe5671 0xe5bcf 0xe4d38 0x5433f 0x54552 0x323aa 0x23cf8 0x1bf7df9 0x1bf7ad0 0x1c11bf5 0x1c11962 0x1c42bb6 0x1C41F4 0x1C41B 0x1bf67e3 0x1bf6668 0x2165c 0x1f82 0x1c45) libc++abi.dylib:terminate调用引发异常


所以任何人都可以告诉我

  • 这个代码有什么问题?我应该采取哪种方法来解决这次崩溃
  • 如何在现有UINavigationController中打开另一个UINavigationController

  • 谢谢。

    不要手动向
    ui窗口添加子视图。它不受支持(或者至少不正常工作)

    使用此方法:

    [firstNavigationVC presentViewController:secondNavigationVC animated:YES completion:nil];
    


    导致崩溃的原因是,您正在将
    obj\u StoreDetailsVC
    添加到新的导航控制器,然后将其视图添加到
    self.view
    。一旦一个VC是另一个VC的子VC,它的
    视图
    必须是该VC的
    视图
    的后代。也许您可以将
    secondNavigationVC
    的视图添加到
    firstNavigationVC
    的视图中,但UIKit不应该这样工作。使用上述方法。

    [self.navigationController pushViewXXXX:myNewNavigationController]不支持推送导航控制器。您可以调用[self.view addSubview:[[navController\u Sections ViewController]objectAtIndex:0]view];我想您可能只需要[self.view addSubview:navController_sections.view];为什么要将导航控制器推入导航控制器?您“可以”这样做:UIView*rootView=[[[UIApplication sharedApplication]keyWindow]子视图]对象索引:0];[rootView addSubview:dview];你为什么要这么做?!不要访问U
    IWindow
    的子视图,因为存在一些私有视图层次结构。如果不注入新的子视图,则将子视图添加到子视图堆栈顶部的视图中。我说你不能,但你应该。实际上,我使用它在一般触发代码中添加覆盖。通过这种方式添加子视图,我永远不需要知道我在视图堆栈中的位置,我可以始终覆盖。您可能会面临一些窗口功能停止用于此“覆盖”的风险。自动旋转?事件处理?模态演示?您应该在自己的根视图控制器中执行覆盖之类的操作,因为这样您就可以确保它在下一个iOS版本中也能正常工作。
    [firstNavigationVC presentViewController:secondNavigationVC animated:YES completion:nil];