UIAlertController为什么在等待答案时不暂停代码?

问题描述

我的理解是,UIAlertController呈现后的正常行为是等待用户响应,换句话说,暂停其他代码

在这种情况下,当用户单击“保存”时,应该出现一个UIAlertController,向用户询问有关保存的问题,然后等待响应。但是,代码仍在继续,并且警报控制器在大约一秒钟后被关闭

以下是什么错误导致阻止代码暂停并导致警报在大约一秒钟后消失?

-(void) save {
if (listView.text.length>=1) {
[self fireAlertNewOrUpdate];
}
// save everything else
//dismiss view controller - this line of code may be dismissing the alert controller...
}

-(void) fireAlertNewOrUpdate {
    UIAlertController *listAlert = [UIAlertController alertControllerWithTitle:@"Save list as new?" message:nil preferredStyle:UIAlertControllerStyleAlert];
       
       UIAlertAction* yes = [UIAlertAction
                             actionWithTitle:@"OK"
                             style:UIAlertActionStyleDefault
                             handler:^(UIAlertAction * action)
                             {
                             [self saveNewList];
                                 
                             }];
       UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Update existing" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action)
                                {
                                   [self updateExisting];
                                }];
       [listAlert addAction:cancel];
       [listAlert addAction:yes];
       if ([listAlert respondsToSelector:@selector(setPreferredAction:)]) {
           [listAlert setPreferredAction:yes];
       }
       [self presentViewController:listAlert animated:YES completion:nil];
    
}

解决方法

您自己给出了答案,但您也将其隐藏了。 (幸运的是,您在注释中提示了它。)这是因为在save中有一行代码被您省略了,您在其中关闭了视图控制器。该视图控制器警报,因此警报是响应呼叫fireAlertNewOrUpdate而出现的,然后立即再次消失。实际上,您是在一次呼吸中说present / dismiss

我的理解是,UIAlertController呈现后的正常行为是等待用户响应,换句话说,暂停其他代码

不,一点都不正确。实际上,恰恰相反。即使在警报出现后,您的“其他代码”也将继续显示。在iOS编程中,基本上没有任何代码会自发地“暂停”。因此,在调用present之后,通常会出现一个视图控制器,使该代码中的无事可做

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...