Objective c 以编程方式从ARC中的导航堆栈中删除viewController
在按下第三个新的ViewController之前,我想清除包含两个视图控制器的导航堆栈。我正在做以下工作:Objective c 以编程方式从ARC中的导航堆栈中删除viewController,objective-c,ios,cocoa-touch,uinavigationcontroller,automatic-ref-counting,Objective C,Ios,Cocoa Touch,Uinavigationcontroller,Automatic Ref Counting,在按下第三个新的ViewController之前,我想清除包含两个视图控制器的导航堆栈。我正在做以下工作: NSMutableArray *viewControllerArray=[[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; for (int i = 0; i < [viewControllerArray count]; i++) { [viewControl
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.
但是我的新视图不会被推送,而是显示导航堆栈中最顶层的视图。我觉得这很奇怪,因为我已经删除了ViewControllers并在NSLog中打印了它,它显示为null 尝试在按下第三个视图之前移除一个视图控制器,并从第三个视图控制器移除第二个视图控制器。使用loop删除多个viewController有时可能会导致错误。尝试在按下第三个视图之前删除一个视图控制器,并从第三个视图控制器中删除第二个视图控制器。使用循环删除多个viewController有时可能会导致错误
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];
试试这个
尝试此操作。如果我在DetailViewController中执行此操作,[viewControllerArray removeObjectAtIndex:I]也将删除DetailViewController,并在我的回答中检查for循环中的条件。它是[viewControllerArray count]-1如果它不工作,请尝试在按下第三个视图之前删除一个视图控制器,并从第三个视图控制器中删除第二个视图控制器。使用循环删除多个viewController有时可能会导致错误。我不知道为什么。你是对的。使用循环删除多个viewController不会提供预期的结果。真奇怪。感谢您的帮助:)。我一直在苦苦挣扎。请将您的评论添加到答案中,以便我可以接受。从DetailViewController类的堆栈中删除以前的ViewController不会有任何区别。由于第二个原因,我接受了它。如果我在DetailViewController中执行此操作,[viewControllerArray removeObjectAtIndex:I]也将删除DetailViewController,并在我的回答中检查for循环中的条件。它是[viewControllerArray count]-1如果它不工作,请尝试在按下第三个视图之前删除一个视图控制器,并从第三个视图控制器中删除第二个视图控制器。使用循环删除多个viewController有时可能会导致错误。我不知道为什么。你是对的。使用循环删除多个viewController不会提供预期的结果。真奇怪。感谢您的帮助:)。我一直在苦苦挣扎。请将您的评论添加到答案中,以便我可以接受。从DetailViewController类的堆栈中删除以前的ViewController不会有任何区别。因为第二部分,我接受了它
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];