navigationController.viewControllers在iOS 8.2中以不同的方式工作

在我的项目中,我正在使用一些代码来处理后退button,如下所示。

NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; if ([[VCs objectAtIndex:[VCs count] - 2] isKindOfClass:[LoginViewController class]]) { [VCs removeObjectAtIndex:[VCs count] - 2]; [VCs removeObjectAtIndex:[VCs count] - 2]; } [self.navigationController setViewControllers: VCs]; 

在iOS 7中,我正在得到所需的结果。 但对于iOS版本8.2,可变数组VC中的值只是堆栈中的当前或topViewController。 但后退button将导航到所有以前的视图控制器。 但是他们都没有出现在导航堆栈中。ios8中的导航处理是否有任何改变?

我想从堆栈中删除login屏幕viewcontroller,以便点击后退button,它不会回到login屏幕。 我只在iOS 8.2中面对这个问题(可能在iOS 8和更高版本中)。 可能是什么问题?

编辑:

prepareForSegue:中 ,我使用下面的代码:

 if([[segue identifier] isEqualToString:@"mediaDetailSegue1"]) { MovieDetailViewController *movieDetail; if(isIOS8SystemVersion) { movieDetail = ([[segue destinationViewController]viewControllers][0]); } else { movieDetail = [segue destinationViewController]; } movieDetail.videoData = [_mediaContentArray objectAtIndex:selectedIndex]; } 

所以对于大于8的iOS版本的代码

  movieDetail = ([[segue destinationViewController]viewControllers][0]); 

叫做。 我认为这是造成这个问题。 我做错了吗?

我得到了我的导航堆栈只有一个viewController的原因在iOS8及以上版本中,如果我们通过第二个VC的navigationController从viewController创build一个segue到第二个viewController,那么第二个VC的navigationStack将只包含topViewController。

我尝试创build一个示例项目。如果segue从VC直接到第二个VC,那么VC2的导航堆栈将包含VC1和VC2。如果segue通过VC2的导航控制器,则VC2的导航堆栈将包含仅限VC2。iOS8的行为

在这两种情况下,该应用程序在ios 7中的行为类似。不知道为什么它在ios8中performance奇怪

我正在尝试与iOS 8.2相同。 self.navigationController.viewControllers返回堆栈中的所有视图控制器。没有这样的问题。我不知道为什么你面临这样的问题。

尝试使用这个Code.It对我来说工作得很好。

 NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; for(int i = 0; i < VCs.count; i++) { UIViewController *vc = VCs[i]; if ( [vc isKindOfClass:[LoginViewController class]]) { [VCs removeObjectAtIndex:i]; } [self.navigationController setViewControllers: VCs];