运行时错误 - "嵌套推送动画"当popToRootViewController调用时

时间:2014-06-12 16:06:37

标签: ios objective-c

我在一个充当登录页面的UiViewController中调用popToRootViewController。一旦后端验证了用户,就会调用该方法,现在允许用户访问其帐户。再次显示根视图控制器时,出现以下两个错误。

  

嵌套推送动画可能导致导航栏损坏

     

在意外状态下完成导航转换。导航栏子视图树可能已损坏。

以下是登录用户的代码。

- (IBAction)signIn:(id)sender
{
    NSString *userName = [self.emailTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSString *password = [self.passwordTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    if (userName.length == 0 || password.length ==0){
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Invalid Login Credentials" message:@"Make sure you have entered a valid Username and Password" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alertView show];
    }else{
        [PFUser logInWithUsernameInBackground:userName password:password block:^(PFUser *user, NSError *error) {
            if (error){
                UIAlertView *errorAlertView = [[UIAlertView alloc]initWithTitle:@"Something went wrong" message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
                [errorAlertView show];

            }else{
                //dispatch_sync(dispatch_get_main_queue(), ^{
                     [self.navigationController popViewControllerAnimated:YES];
                //});

            }
        }];

    }
}

rootViewController是应用程序启动的初始视图,并在那里检查是否有当前用户,如果没有,则将用户发送到登录页面。我注意到,进入Login页面后,导航栏顶部会出现一个后退箭头,返回rootViewController。一旦用户登录,现在在同一个地方有一个后退按钮,想要将用户带回已经弹出的LoginViewController。我认为这是问题发生的地方。

1 个答案:

答案 0 :(得分:1)

当您尝试推送多个视图控制器或弹出多个视图控制器时,会引发此错误。您确定rootViewController的viewWillAppear方法没有尝试推送视图控制器吗?如果是这样,您正在尝试推送视图控制器,同时弹出另一个视图控制器。希望这可以帮到你!