Ios 在2个屏幕导航控制器之间交换视图控制器会导致层次结构不一致异常

Ios 在2个屏幕导航控制器之间交换视图控制器会导致层次结构不一致异常,ios,cocoa-touch,uikit,Ios,Cocoa Touch,Uikit,我有一个容器视图控制器,它可以并排处理两个导航控制器。有时我需要将一组视图控制器从一个导航堆栈移动到另一个导航堆栈的底部 问题是我得到了iOS 5中新增的UIViewControllerHierarchyConsistency异常。我不知道该怎么解决这个问题。使用push/pop方法可以很好地工作,但是我需要在堆栈中进一步插入内容,以便访问视图控制器阵列本身。代码是: - (void)swapViewController:(UIViewController *)controller {

我有一个容器视图控制器,它可以并排处理两个导航控制器。有时我需要将一组视图控制器从一个导航堆栈移动到另一个导航堆栈的底部

问题是我得到了iOS 5中新增的
UIViewControllerHierarchyConsistency
异常。我不知道该怎么解决这个问题。使用push/pop方法可以很好地工作,但是我需要在堆栈中进一步插入内容,以便访问视图控制器阵列本身。代码是:

- (void)swapViewController:(UIViewController *)controller {

    NSMutableArray *leftStack = [NSMutableArray arrayWithArray:_leftNavController.viewControllers];
    NSMutableArray *rightStack = [NSMutableArray arrayWithArray:_rightNavController.viewControllers];

    if ([leftStack containsObject:controller]) {

        // Left to right
        [leftStack removeObject:controller];
        [rightStack addObject:controller];
        [_leftNavController setViewControllers:leftStack];
        [_rightNavController setViewControllers:rightStack];

    } else {

        // Right to left
        [rightStack removeObject:controller];
        [leftStack addObject:controller];
        [_rightNavController setViewControllers:rightStack];
        [_leftNavController setViewControllers:leftStack];

    }

}
完全例外的情况是:

*** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<MyViewController: 0x6c4e7f0> should have parent view controller:<UINavigationController: 0x6a5d100> but requested parent is:<UINavigationController: 0x6a58c10>'
***由于未捕获的异常“UIViewControllerHierarchyConsistency”而终止应用程序,原因:“子视图控制器:应具有父视图控制器:但请求的父视图控制器为:”
我有一个:

当您抓取UINavigationController的视图控制器并将其插入到另一个导航控制器中时,它们在逻辑上仍然位于第一个导航控制器中,因此出现异常

为什么不创建新的视图控制器来执行此操作?如果需要,您可以让他们共享数据或状态,甚至为他们实现一个完整副本以使这更简单,但不一致性直接来自于试图同时在两个不同的控制器中使用视图控制器

因此,我将处理原始导航控制器,并为每个VC转换重新创建它们