2

最初にユーザーにログイン ウィンドウを表示する iOS 5 アプリケーションに取り組んでいます。ログインに成功すると、実際のアプリの大部分を含む UINavigationController を提示する Modal Segue が実行されます。この時点から多くのことが発生する可能性がありますが、私が興味を持っているのは、ユーザーがログアウトすることを決定したときです。

最初のビューであるログイン ウィンドウに戻りたいのですが、Navigation Controller をポップして最初のビューに戻ることができないようです。

視覚化として:

                                             (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>

ログイン ビューの委譲は次のようになります。

// 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;
    }
}

前もって感謝します!

4

2 に答える 2

1

NavigationController を呼び出した後に表示される viewController で、これを呼び出します

[self dismissViewControllerAnimated:YES completion:nil];

ナビゲーションコントローラーをポップしたい場所。これは私にとってはうまくいきました。

于 2012-09-10T03:52:51.890 に答える