dismissViewControllerAnimated 在块内不起作用

dismissViewControllerAnimated does not work within a block

我尝试在 UIAlertController 显示后关闭 UIViewController

这是我的代码:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title 
                                                                         message:msg
                                                                  preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Accept" 
                                                   style:UIAlertActionStyleDefault 
                                                 handler:^(UIAlertAction *action)
             {
                 [self dismissViewControllerAnimated:YES completion:nil];
             }];

[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:^{}];

然而,self 永远不会被解雇。任何人都知道如何解决这个问题?

更新

如果我在块外设置 [self dismissViewControllerAnimated:YES completion:nil];,它会起作用。

[self dismissViewControllerAnimated:YES completion:nil] 将关闭 当前显示的视图 (即 "self")正在显示的所有视图控制器。您想要做的是 运行 在 "self" 的 呈现 视图控制器上使用相同的方法。即

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

您是否检查过在哪个线程上调用该块?如果它不是线程 1,那么它不会正确关闭您的视图,因为 UI 操作只能在线程 1 上完成。尝试创建一个关闭方法,然后在主线程上调用它:

    ...handler {
     [self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO];
}];

-(void)dismissModalView {
     [self dismissViewControllerAnimated:YES completion:nil];
}

以防有人遇到同样的问题。我推了 UIViewController,我没有用 presentViewController:animated:completion: 显示它。这就是为什么应该使用 [self.navigationController popViewControllerAnimated:YES]; 的原因。

奇怪的是 [self dismissViewControllerAnimated:YES completion:nil]; 在街区外工作而没有在街区内工作,对此我没有任何解释...

只需使用[super.navigationController popViewControllerAnimated:YES];