注销PFuser会将您带回登录屏幕,但navigationController现在是空白的?

时间:2014-01-14 07:09:01

标签: ios objective-c parse-platform

我正在使用parse.com。我有一个UINavigationController自定义类chwRootViewController,它被设置为初始视图。

当用户成功登录时,运行:

// Sent to the delegate when a PFUser is logged in.
- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
    [self dismissViewControllerAnimated:YES completion:NULL];
}

现在chwMainviewController是登录方法解除UIViewController时显示的chwRootViewController。在主视图控制器中,我有一个IBAction用于单击注销按钮,如下所示:

- (IBAction)logoutButtonClicked:(id)sender {

    [PFUser logOut]; // Log out


    // Return to login page
    if (![PFUser currentUser]) {

        [self.navigationController popToRootViewControllerAnimated:YES];
    }

问题是最后一行将用户返回到登录屏幕,但现在chwMainViewController已不再准备好并在登录屏幕后面等待。当您第二次登录时,chwRootViewController被解除时只有黑屏。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用以下步骤:

在您的初始view controllerchwMainviewController.m文件中,执行:

  1. 实施viewDidAppear方法,如下所示:

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:YES];
        if (![PFUser currentUser]) {
            [self showLogInPage];
        }
    }
    
  2. 编写code以在showLogInPage方法中显示解析登录页面,如下所示:

    - (void)showLogInPage
    {
        PFLogInViewController *logInController = [[PFLogInViewController alloc] init];
        logInController.delegate = self;
        logInController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton | PFLogInFieldsFacebook;
        PFSignUpViewController *signUpController = [[PFSignUpViewController alloc] init];
        signUpController.delegate = self;
        logInController.signUpController = signUpController;
       [self presentViewController:logInController animated:YES completion:nil];
    }
    
  3. 最后,按照以下方式实施logoutButtonClicked

    - (IBAction)logoutButtonClicked:(id)sender {
        [PFUser logOut];
        [self showLogInPage];
    }
    
  4. 注意:

    如果您未使用 情节提要 ,请确保在chwMainviewController方法中将rootViewController设为application didFinishLaunchingWithOptions

    希望这有帮助!

答案 1 :(得分:0)

问题是你正在解雇rootViewController

我认为你应该采用类似

的结构

didFinishLaunching RootCOntroller navigationController - rootViewController - > applicationDidBecomeActive

并登录时检查navigationController处的值,并在{{1}}的帮助下将控制器显示为模型