2

您好,下午好,我在这里遇到了一些问题,老实说,我不明白我必须为具有不同消息的同一屏幕创建不同的警报视图,这些警报中的大多数只有 1 个按钮,但是有这个删除需要 2 个按钮的问题是,由于其他按钮只有 1 个按钮,所以当我创建 2 个按钮屏幕视图并添加 (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 时,它会将您带到上一个视图控制器,然后单击确定按钮(实际上是取消按钮标题)应用程序崩溃而没有任何“错误消息”

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

4

1 回答 1

1

我猜问题是您为 alertViewAcept 设置了委托,并且在显示警报后立即弹出 viewController,因此您的委托将被释放,一旦单击警报视图上的按钮,就会给您一个错误.

你应该做这个:

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

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

于 2012-06-04T20:21:42.263 回答