0

在推送第三个新 ViewController 之前,我想清除具有两个视图控制器的导航堆栈。我正在执行以下操作:

NSMutableArray *viewControllerArray=[[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];

for (int i = 0; i < [viewControllerArray count]; i++) {
      [viewControllerArray removeObjectAtIndex:i]; 
      //here the [viewControllerArray count] is 2,but loop is iterated only once.
}

self.navigationController.viewControllers=viewControllerArray;

NSLog(@"View Controller Array %@",[self.navigationController viewControllers])
//This will print null which I assume is correct.

然后我按如下方式推送新的 ViewController:

  DetailViewController *detailView=[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

  [self.navigationController pushViewController:detailView animated:YES];

但是我的新视图没有被推送,而是显示导航堆栈中的最顶层视图。我觉得这很奇怪,因为,我已经删除了 ViewControllers 并在 NSLog 中打印它,它显示为 null。

4

2 回答 2

3
DetailViewController *detailView = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];    
NSMutableArray *viewControllerArray = [self.navigationController.viewControllers mutableCopy];
[viewControllerArray removeAllObjects];
[viewControllerArray addObject:detailView];
[self.navigationController setViewControllers:viewControllerArray animated:YES];

试试这个。

于 2012-12-04T13:16:15.657 回答
1

尝试在推送第三个视图之前删除一个视图控制器,并从第三个视图控制器中删除第二个视图控制器。使用循环删除多个 viewController 有时可能会导致错误。

于 2012-12-04T11:24:31.880 回答