Ios 从导航堆栈中删除viewController时出现问题

Ios 从导航堆栈中删除viewController时出现问题,ios,objective-c,uinavigationcontroller,pushviewcontroller,Ios,Objective C,Uinavigationcontroller,Pushviewcontroller,我正在制作一个演示,其中我必须从NavigationController中删除一些ViewController,为此我实现了下面的代码,但它给了我一个问题 我已经按下了VC1、VC2、VC3,现在我想按下VC4并移除VC2 ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil]; [self.navigationController pushViewController

我正在制作一个演示,其中我必须从NavigationController中删除一些ViewController,为此我实现了下面的代码,但它给了我一个问题

我已经按下了VC1、VC2、VC3,现在我想按下VC4并移除VC2

ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self.navigationController pushViewController:VC4 animated:YES];

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];

for(UIViewController *objVC in viewControllers)
{
    if([objVC isKindOfClass:[ViewController2 class]])
    {
        [viewControllers removeObjectIdenticalTo:objVC];
    }
}
self.navigationController.viewControllers =viewControllers ;
这段代码在iOS8上运行良好,但在iOS7和VC2中,当我按下VC4中的后退按钮时,VC3也会自动删除。 即使我在下面输入代码,控制器也会自动从堆栈中删除

ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self.navigationController pushViewController:VC4 animated:YES];

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];

self.navigationController.viewControllers =viewControllers ;

以下是修复程序,在iOS7和iOS8中运行良好:

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];

    // Find the things to remove
        NSMutableArray *toDelete = [NSMutableArray array];

    for(UIViewController *objVC in viewControllers)
    {
        if([objVC isKindOfClass:[ViewController2 class]])
        {
            [toDelete addObject:objVC];
        }
    }
    [viewControllers removeObjectsInArray:toDelete];
    self.navigationController.viewControllers =viewControllers ;

ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self.navigationController pushViewController:VC4 animated:YES];

问题1:当您按下VC4或从VC4返回时,是否要删除VC2?问题2:当您从VC4返回时,VC2和VC3将从堆栈中删除,对吗?在您按下VC4后,你能记录导航堆栈中的所有视图控制器并检查堆栈中是否有VC4吗?回答1:我想在按下VC4后删除VC2。回答2:是的,当我从VC4按回键时,我直接来到VC1,因为我删除了VC2,VC3自动删除。Ans3:在按下VC4并移除VC2之后,我可以在NSLog中获得所需的堆栈VC1、VC3、VC4。即使在VIEW中,VC4的NSLog也会显示相同的日志,但在VIEWDID中,VC4仅打印VC1、VC4。谢谢!还可以检查我的第三条注释,以便在执行删除操作之前记录视图控制器