2015-11-19 72 views
0

我是iOS新手,我试图制作用户注册应用程序。代码:调用警报控制器后调用下一个视图控制器

-(void) registerNewUser{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:_usernameField.text forKey:@"username"]; 
    [defaults setObject:_passwordField.text forKey:@"password"]; 
    [defaults setBool:YES forKey:@"registered"]; 
    [defaults synchronize]; 

    UIAlertController *success = [UIAlertController alertControllerWithTitle:@"Success" 
           message:@"You are registered" 
           preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK Action") 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction *action){ 
            NSLog(@"OK Action"); 
           }]; 
    [success addAction:okAction]; 
    [self presentViewController:success animated:YES completion:nil]; 
    [self performSegueWithIdentifier:@"login" sender:nil]; 

} 

我现在遇到的问题是

Warning: Attempt to present <WelcomePageViewController: 0x7fa1d3cecbb0> on <RegistrationViewController: 0x7fa1d3c49d70> which is already presenting <UIAlertController: 0x7fa1d3c5fd40> 

其中WelcomePageViewController是下一个视图控制器我想去。我已通过thisthisthis进行了搜索。

那么从拳头链接的接受的答案我知道,如果你已经告诉视图控制器presentViewController:...,你不能再这样做,直到提出的视图控制器已被解雇。

在模拟过程中我来说,我得到了success you are registered消息即高达直到[self presentViewController:success animated:YES completion:nil];但下一行[self performSegueWithIdentifier:@"login" sender:nil]; 不执行即程序未segueing到下一个视图控制器由于本控制器正忙于报警控制器。

当我注释掉[self presentViewController:success animated:YES completion:nil];我确实转到下一个视图控制器。但我想获得警报消息,然后继续到下一个视图控制器。这怎么可能?

回答

1

你想点击OK按钮后执行SEGUE,然后尝试

- (void)registerNewUser 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:_usernameField.text forKey:@"username"]; 
    [defaults setObject:_passwordField.text forKey:@"password"]; 
    [defaults setBool:YES forKey:@"registered"]; 
    [defaults synchronize]; 

    UIAlertController *success = [UIAlertController alertControllerWithTitle:@"Success" message:@"You are registered" preferredStyle:UIAlertControllerStyleAlert]; // This statement create alert controller 

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK Action") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 

     NSLog(@"OK Action"); 
     [self performSegueWithIdentifier:@"login" sender:nil]; 
     [success dismissViewControllerAnimated:TRUE completion:nil]; // Here alert is automatically dismiss after taking action, or you can manually dismiss it by this, but not need. 

    }]; // This create action for alert controller with handler. Handler is that part of action when action performed by user handler called and take action according to your code written in this block. 

    [success addAction:okAction]; // Here action is added to alert controller. 

    [self presentViewController:success animated:YES completion:nil]; // And this is for present or you can say show alert on your screen. here you can also add hanler instead of nil when alert present on screen 
} 
+0

它的工作。我可以问你解释流程是如何发生的吗? – Rishab

+0

请参阅答案中的评论。高兴地帮助:) – VRAwesome

+0

最少15个字符是怎么回事。谢谢btw。 – Rishab

相关问题