0

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에서 인쇄하기 때문에 이것이 매우 이상하다고 생각합니다.

답변

1

세 번째보기를 열기 전에 하나의보기 컨트롤러를 제거하고 세 번째보기 컨트롤러에서 두 번째보기 컨트롤러를 제거하십시오. 루프를 사용해 1 개 (살) 이상의 viewController를 삭제하면, 에러가 발생할 경우가있다.

+0

그렇다면 DetailViewController에서 수행하면 [viewControllerArray removeObjectAtIndex : i]는 DetailViewController도 제거합니다. – Raj

+0

for 루프의 조건을 확인하십시오. [viewControllerArray count] -1 –

+1

작동하지 않는 경우 세 번째보기를 열기 전에 하나의보기 컨트롤러를 제거하고 세 번째보기 컨트롤러에서 두 번째보기 컨트롤러를 제거하십시오. 루프를 사용해 1 개 (살) 이상의 viewController를 삭제하면, 에러가 발생할 경우가있다. 나는 이유를 모른다. –

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]; 

시도해보십시오.

관련 문제