多个alertViews会产生错误

时间:2012-06-04 20:12:11

标签: iphone ios xcode error-handling uialertview

您好,下午好,我在这里遇到一些问题,说实话,我不明白 我必须使用不同的消息为同一个屏幕创建不同的alertViews,这些警报中的大多数只有1个按钮,但是这个要删除的需要2个按钮,事情就是这样,因为其他人只有1个按钮,当我创建时2按钮screenview和我添加了(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex方法,我有一些问题

这里的一些代码

- (IBAction)saveInfo{
if (med.text.length ==0) {
    UIAlertView *alertViewError = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ERROR",@"")
                                                        message:NSLocalizedString(@"EMPTY1",@"") 
                                                       delegate:self 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles: nil];
    [alertViewError show];
    [alertViewError release];
}
else if(medicamento.text.length >= 41){
    [self lenghtError:40:NSLocalizedString(@"TF_MED",@"")];
}
else if (med.text.length ==0 || descripcion.text.length == 0) {
    UIAlertView *alertViewError = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ERROR",@"")
                                                        message:NSLocalizedString(@"EMPTY2",@"") 
                                                       delegate:self 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles: nil];
    [alertViewError show];
    [alertViewError release];
}
else if (descripcion.text.length >= 41){
    [self lenghtError:40:NSLocalizedString(@"TF_DESCRIPCION",@"")];
}
else{
    [self insertDictionary];
    UIAlertView *alertViewAcept = [[UIAlertView alloc] initWithTitle:@"" 
                                                        message: NSLocalizedString(@"ACCEPT_MSG",@"")
                                                       delegate:self 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles: nil];
    [alertViewAcept show];
    [alertViewAcept release];
    [self.navigationController popViewControllerAnimated:YES];
}

}

- (IBAction)cancelData{
UIAlertView *alertViewCancel = 
[[UIAlertView alloc] initWithTitle: NSLocalizedString(@"BT_DELETE_MED",@"")
                    message: NSLocalizedString(@"MSG_DELETE_MED",@"")
                   delegate:self 
          cancelButtonTitle:@"OK" 
          otherButtonTitles: @"Cancel", nil];
[alertViewCancel setTag:999];
[alertViewCancel show];
[alertViewCancel release];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (alertView.tag == 999) {
    if(buttonIndex==0){
        [self.Bayer_DB_obj deleteRowWithKeyValue:[NSString stringWithFormat:@"%d",IdMed] onKeyName:@"id_ctl_med" onTable:@"ctl_med"];
        // code to delete here
        [self.navigationController popViewControllerAnimated:YES];
    }
}

}

所以,在第一部分中,我创建了一些警告来指示用户他/她犯了错误,在第二部分中,我需要在删除之前进行确认,但是在这里,我需要2个按钮,然后,第三部分,我有被调用的方法,我在警报中添加了一个标记,以避免在所有警报中进行这种比较,问题是,当你显示alertViewAcept时,它会带你到前一个视图控制器,单击确定按钮(实际上是取消按钮)后,应用程序崩溃,没有任何“错误消息”

所以我不确定我做错了什么,请帮忙

1 个答案:

答案 0 :(得分:1)

我的猜测问题是你设置了alertViewAcept的委托,并在你显示警告后立即弹出viewController,这样你的委托就会被释放,一旦警报按钮就会出错单击视图。

你应该这样做:

UIAlertView *alertViewAcept = [[UIAlertView alloc] initWithTitle:@"" 
                                                        message: NSLocalizedString(@"ACCEPT_MSG",@"")
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles: nil];

更好的是,只有OK按钮的所有警报都不需要委托。在这种情况下,您甚至不需要标签。