为什么 UIAlertController 在等待答案时不暂停代码?
Why is UIAlertController not pausing code while it waits for answer?
我的理解是 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
。
My understanding is that normal behavior for a UIAlertController after being presented is to wait for the user to respond in other words pause other code
不,完全不是这样。事实上,恰恰相反。即使在警报出现后,您的“其他代码”也会继续运行。 iOS 编程中基本上没有任何代码会自发“暂停”的地方。出于这个原因,在您调用 present
以呈现视图控制器以在该代码中进一步执行 nothing 之后是很常见的。
我的理解是 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
。
My understanding is that normal behavior for a UIAlertController after being presented is to wait for the user to respond in other words pause other code
不,完全不是这样。事实上,恰恰相反。即使在警报出现后,您的“其他代码”也会继续运行。 iOS 编程中基本上没有任何代码会自发“暂停”的地方。出于这个原因,在您调用 present
以呈现视图控制器以在该代码中进一步执行 nothing 之后是很常见的。