2

먼저 사용자에게 로그인 윈도우를 제공하는 iOS 5 응용 프로그램에서 작업하고 있습니다. 로그인에 성공하면 실제 앱의 대량을 포함하는 UINavigationController를 표시하는 모달 전환 (Modal Segue)이 수행됩니다. 이제부터는 많은 점이 발생할 수 있지만, 사용자가 로그 아웃하기로 결정할 때 관심이 있습니다.모달 상영 된 UINavigationController 팝업

첫 번째보기 인 로그인 창으로 돌아가고 싶지만 탐색 컨트롤러가 튀어 나와 첫 번째보기로 돌아갈 수 없습니다. 시각화로

: 나는 모달 발표 된 네비게이션 컨트롤러를 기각하는 시간이라는 초기 로그인보기를 통보, 위임을 시도했습니다

           (NavigationController) 
[UserLoginViewController] --modal segue-> [UserMenuTableViewController] --push segue--> [otherviews, etc] 
    ^            | 
    |            modal segue 
    |             | 
    |             v 
    ^         [UserDashBoardViewController] 
    |             | 
    |           (logout pressed) 
    |             | 
     -<---------------pop back to login--------------<- 

,하지만 난 오류 얻을 :

2012-09-10 11:13:05.749 KITxWebMobileJSONv4[1138:f803] attempt to dismiss modal view controller whose view does not currently appear. self = <UINavigationController: 0x68c6150> modalViewController = <UserDashboardViewController: 0x68d9fb0> 
2012-09-10 11:13:05.749 KITxWebMobileJSONv4[1138:f803] attempt to dismiss modal view controller whose view does not currently appear. self = <UserLoginViewController: 0x688ffa0> modalViewController = <UINavigationController: 0x68c6150> 

[로그인보기 대표단은 다음과 같습니다 : ADVA의

// This method is called from the UserMenuTableViewController, when it's time to log out: 
- (void)userMenuTableViewController:(UserMenuTableViewController *)sender 
          loggedOut:(BOOL)didLogOut 
{ 
    if (didLogOut) { 
     /* delete user info and take care of data on backend: 
     * ... 
     */ 

     // pop navigation controller, presenting the initial Login View: 
     [self dismissModalViewControllerAnimated:YES]; // THIS LINE FIRES AND GETS THE ERROR ABOVE 
    } 
} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Login Success"]) { // successful login: 

     // set (UINavigationController *)self.nav to the segue destination (for a handle, if needed): 
     self.nav = (UINavigationController *)segue.destinationViewController; 

     // grab the user menu and set self to be it's delegate: 
     UserMenuTableViewController *userMenu = [self.nav.viewControllers lastObject]; 
     userMenu.delegate = self; 
    } 
} 

감사합니다 nce! 당신이있는 navigationController을 팝업 할 위치

+0

오류 메시지에'UserDashboardViewController'가 언급되어 있지만 귀하의 게시물에 다른 언급이 없습니다. 'UserDashboardViewController'는 어떻게 표시됩니까? 'UserMenuTableViewController'와의 관계는 무엇입니까? –

+0

dismissModalViewControllerAnimated를 호출하기 전에 NavController의 스택에서 수동으로 모든 ViewController를 팝업하고 있습니까? [This] (http://stackoverflow.com/questions/3988432/two-modalviewcontroller) 질문은 여러 개의 해제 호출을 동시에 실행하려는 경우 문제가있는 유사한 상황 (여러 개의 모달 ViewController를 허용하는 체인 임에도 불구하고)을 처리합니다. – Xono

+0

네비게이션 컨트롤러와 어떻게 구별합니까? – Neo

답변

1

당신이있는 navigationController라고 후에 나타나는의 ViewController,이

[self dismissViewControllerAnimated:YES completion:nil]; 

를 호출합니다. 이것은 나를 위해 일했다.

+0

그 트릭을 했어! 그러나 나는'UserDashboardViewController'의 델리게이트 메소드에서 호출 할 때 아무런 일도 일어나지 않기 때문에 논리적 인 문제를 가져야합니다. 그러나 더미 버튼에서이 코드 라인을 테스트하기 위해 툴바에 넣었을 때 완벽하게 작동했습니다. 감사! – BFeher

+0

당신은 오신 것을 환영합니다. – Neo

+0

폐쇄 용. 사용자가'UserDashboardViewController'에서 로그 아웃을 선택하면 위임을 통해 메시지가 ('UserMenuTableViewController') 프리젠 테이션 뷰로 다시 전달됩니다. 여기서 BOOL 속성'shouldLogOut'을 YES로 설정합니다. 'UserMenuTableViewController'의'viewDidAppear' 메쏘드에서'shouldLogOut'가 YES 일 때'[self dismissViewControllerAnimated : YES completion : nil];을 호출합니다. 완벽하게 작동합니다! – BFeher

1

너무 늦기는하지만 긴장을 푸는 방법을 사용하면 그에 따라 풀릴 수 있습니다.