Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 以编程方式从ARC中的导航堆栈中删除viewController_Objective C_Ios_Cocoa Touch_Uinavigationcontroller_Automatic Ref Counting - Fatal编程技术网

Objective c 以编程方式从ARC中的导航堆栈中删除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

在按下第三个新的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.

但是我的新视图不会被推送,而是显示导航堆栈中最顶层的视图。我觉得这很奇怪,因为我已经删除了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];