2014-11-06 1 views
0

첫 번째 viewcontroller에 UIViewController가있는 응용 프로그램을 개발 중입니다. 이 컨트롤러는 다른 컨트롤러가 포함 된 NavigationViewController를 푸시합니다. 이제 초기 UIViewController로 돌아가려면 NavigationController의 RootViewController를 팝업해야합니다. 내가Pop the RootViewController

[self dismissViewControllerAnimated:YES completion:nil]; 

앱 충돌로 시도 ("Tread1 : EXC_BAD_ACCESS (코드 = 1, 주소 = ...)"). 시도해 보았습니다.

[self.navigationController popViewControllerAnimated:YES]; 

아무 반응이 없습니다.

초기의 UIViewController는 SEGUE 유형의 인 UIBuilder은 "(예를 들면. 푸시)"

그런 다음 나는 RootViewController 다른의 ViewController를 포함하는 NavigationViewcontroller가에서

[self performSegueWithIdentifier:@"MyIdentifier" sender:self]; 

를 호출합니다. 내가 뭘 하려는지 RootViewController에서 첫 번째 viewcontroller (navigationcontroller 외부 하나)로 돌아갈 것입니다. 그래서 나는 네비게이션 컨트롤러를 가지고 있어야합니다.

무엇이 누락 되었습니까?

+1

'self'는 누구에게도 'navigationController'가 없습니다. 잘못된보기 컨트롤러와 대화하고 있습니다. 여기서 문제는 뷰 컨트롤러의 전체 "스택"을 좋은 순서로 푸는 것이 필요하다는 것입니다. 아마도 하나 이상의 명령이 필요할 것입니다. 불행히도 여러분의 질문은 뷰 컨트롤러의 실제 풀 세트를 설명하지 않으므로 더 이상 도움이되지 않습니다. – matt

+1

난 당신이보기 컨트롤러 계층 구조를 봐야 할 것 같아요. UIViewController는 자신의 내비게이션 컨트롤러없이 UINavigationController를 "푸시"합니까? UINavigationController를 모달 컨트롤러로 표시하는 것이 좋습니다. – Erik

+0

시도해 볼 수도 있습니다 [self.navigationController popToRootViewControllerAnimated : YES]; – JScarry

답변

0

분명히 나는 ​​GestureRecognizer를 응용 프로그램의 충돌을 일으키는 위치에 두었습니다. 올바른 방법은 다음과 같습니다.

[self dismissViewControllerAnimated:YES completion:nil];