代码不按顺序执行

时间:2014-10-02 17:31:31

标签: ios objective-c uialertview

由于某种原因,此代码不是按顺序执行的。 Xcode似乎正在评估if-else语句,然后在显示if-else语句之前的UIAlertView之前显示if-else语句中的UIAlertView

以下是我的代码供您参考:

- (IBAction)btnLogin:(id)sender; {
    //self.tbxUsername.text = [NSString stringWithFormat:@"vmcv"];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Email"
                                                    message: [NSString stringWithFormat: @"%@", acc.Email]
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];


    if([self.tbxUsername.text isEqualToString:acc.Email ])
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication"
                                                        message: @"Success"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication"
                                                        message: @"Fail"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }
}

2 个答案:

答案 0 :(得分:0)

绘图不是实时进行的。您发出绘图命令,并且在您退出方法后,实际上会在事件循环中绘制屏幕。您无法单步浏览并看到屏幕得到更新。因此,您需要显示第一个警报,退出方法,而不是在第一个警报中显示从退出方法(按下按钮)调用的第二个警报。

答案 1 :(得分:0)

您不应该像这样顺序显示多个UIAlertView。您需要等到前一个被解除,然后在委托回调中显示新的。

您将希望能够识别哪个UIAlertView正在调用委托方法,因此设置一些属性来保存您的UIAlertView。

@property (nonatomic, strong) UIAlertView *emailAlertView, *successAlertView, *failureAlertView;

按下按钮后,您只会启动第一个要求发送电子邮件的UIAlertView。确保更新了代码以将委托设置为self,并且视图控制器实现了UIAlertViewDelegate协议。

- (IBAction)btnLogin:(id)sender; {
    self.tbxUsername.text = [NSString stringWithFormat:@"vmcv"];

    self.emailAlertView = [[UIAlertView alloc] initWithTitle:@"Email"
                                                    message: [NSString stringWithFormat: @"%@", acc.Email]
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [self.emailAlertView show];
}

现在实现委托方法,只有在第一个UIAlertView被解除后才显示下一个UIAlertView。

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if(alertView == self.emailAlertView) {
        if([self.tbxUsername.text isEqualToString:acc.Email])
        {
            self.successAlertView = [[UIAlertView alloc] initWithTitle:@"Authentication"
                                                            message: @"Success"
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [self.successAlertView show];
        }
        else
        {
            self.failureAlertView = [[UIAlertView alloc] initWithTitle:@"Authentication"
                                                            message: @"Fail"
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [self.failureAlertView show];
        }
    }
    else if(alertView == self.successAlertView) {
        //handle dismiss event of success alert view
    }
    else if(alertView == self.failureAlertView) {
        //handle dismiss event of failure alert view
    }
}

这应该达到您正在寻找的“连续”效果。