3 개의 새 ViewController를 푸시하기 전에 두 개의보기 컨트롤러가있는 내비게이션 스택을 지우고 싶습니다. 다음으로ARC의 탐색 스택에서 프로그래밍 방식으로 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];
을하지만 내 새로운 뷰가 밀려 점점되지 탐색 스택 대신 최상위보기 존재가 표시지고 난 다음을 수행하고 . ViewController를 이미 제거하고 null을 표시하는 NSLog에서 인쇄하기 때문에 이것이 매우 이상하다고 생각합니다.
그렇다면 DetailViewController에서 수행하면 [viewControllerArray removeObjectAtIndex : i]는 DetailViewController도 제거합니다. – Raj
for 루프의 조건을 확인하십시오. [viewControllerArray count] -1 –
작동하지 않는 경우 세 번째보기를 열기 전에 하나의보기 컨트롤러를 제거하고 세 번째보기 컨트롤러에서 두 번째보기 컨트롤러를 제거하십시오. 루프를 사용해 1 개 (살) 이상의 viewController를 삭제하면, 에러가 발생할 경우가있다. 나는 이유를 모른다. –