Ios UINavigationController.ViewController和UINavigationBar.items不同步。。。怎样

Ios UINavigationController.ViewController和UINavigationBar.items不同步。。。怎样,ios,uinavigationcontroller,uinavigationbar,uistoryboard,Ios,Uinavigationcontroller,Uinavigationbar,Uistoryboard,有没有人见过UINavigationController.viewControllers堆栈和UINavigationBar.items在使用故事板构建的应用程序上不同步 我开始在我的应用程序中遇到这个问题,但它只出现在iPhone版本上,而不是iPad上。这是一个通用的应用程序,唯一的区别是故事板。而且它只发生在两个特定场景之间的片段上(我的应用程序总共有16个场景)。在每种情况下,我都从MainMenuVC开始,按MenuA\u VC,然后按MenuA\u 2\u VC。UINavigati

有没有人见过
UINavigationController.viewControllers
堆栈和
UINavigationBar.items
在使用故事板构建的应用程序上不同步

我开始在我的应用程序中遇到这个问题,但它只出现在iPhone版本上,而不是iPad上。这是一个通用的应用程序,唯一的区别是故事板。而且它只发生在两个特定场景之间的片段上(我的应用程序总共有16个场景)。在每种情况下,我都从
MainMenuVC
开始,按
MenuA\u VC
,然后按
MenuA\u 2\u VC
UINavigationBar.items
列表具有标题[“主菜单”、“菜单”、“菜单2”],所有这些都是预期的

当我点击
MenuA_2_VC
导航栏上的后退按钮时,问题就出现了。视图控制器弹出以按预期显示
MenuA_VC
,但导航栏显示的是“主菜单”而不是“MenuA”(?!),并且没有返回到
MainMenuVC
的后退按钮

我写了一些代码来检查发生了什么。。。此方法在所有三个VCs的
视图将出现
方法中调用

+(void) logViewControllerStack:(UIViewController*)vc
    { 
    NSLog(@"ViewControllerStack of %@ = { ", NSStringFromClass([vc class]));
    NSArray* viewControllerStack = vc.navigationController.viewControllers;
    for (UIViewController* vc2 in viewControllerStack) {
        NSLog(@"\t\t%@", NSStringFromClass([vc2 class]));
    }
    NSLog(@"}");
    NSLog(@"NavigationBarStack = { ");
    NSArray* navigationBarStack = mv.navigationController.navigationBar.items;
    for (UINavigationItem* ni in navigationBarStack) {
        NSLog(@"\t\t%@", ni.title);
    }
    NSLog(@"}");
}

果然两个堆栈不同步了。。。我第一次在
MenuA\u 2\u VC中看到它。视图将消失
UINavigationController.viewControllers
有两个项目(预期),但
UINavigationBar.items
有一个项目(意外)。我试着在故事板上替换segue并重建这两个场景,但都不起作用。这些是正常的推序列,没有奇特的缩放或转换。所以我甚至不知道这是怎么发生的,也不知道该往哪里看。有什么建议吗?

您是否在控制台中收到任何警告或错误?确保你没有在使用segue的同时插入代码。控制台是干净的。@rdelmar说,推动VC是一个很好的猜测,但这段代码除了在非常罕见和不相关的情况下,不会这样做。(例如,从AlertView中按下“帮助”)。那么我就没有主意了。我唯一一次看到这种情况是在同时发生多个转换时。如果你能把你的项目发布到某个地方,我可以看一看。当我试图在-viewWillAspect回调中设置新的UINavigationController.viewControllers()时,我看到了这一点。看起来导航栏试图与内部的navigationController-ViewDidDisplay:同步,这对我来说是造成此不同步的原因。下面是重现此问题的一个简单示例。导航栏的标题应表示视图控制器的颜色。因此,红色应该显示为红色的视图控制器,另一个为绿色。此示例显示了带有绿色视图控制器的红色(旧navigationItem.title)。