应用程序试图以模态方式呈现一个活动控制器 ios

Posted

技术标签:

【中文标题】应用程序试图以模态方式呈现一个活动控制器 ios【英文标题】:Application tried to present modally an active controller ios 【发布时间】:2013-11-10 20:52:27 【问题描述】:

在显示它可以提供回调之前,我尝试使用父视图控制器设置 ViewController,我使用 PrepareForSegue 完成此操作

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([segue.identifier isEqualToString:@"newQuarter"])
    
        [segue.destinationViewController setParentViewController:self];
    

它崩溃给我错误消息:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller.

所以我尝试使用另一种方法并在按钮上设置一个新的视图控制器,

- (IBAction) buttonClicked

    NewViewController *newController = [[NewViewController alloc] init];
    [newController setParentViewController:self];

    [self presentViewController:newController animated:YES completion:nil];

但是没有运气,它仍然给我同样的错误信息,有人可以请教吗?谢谢!

【问题讨论】:

"Application tried to present modally an active controller"?的可能重复 @CarlVeazey 这不是“应用程序试图以模态方式呈现活动控制器”的副本。不过还是谢谢你的建议! :D 【参考方案1】:

解决了这个问题,因为父视图控制器是tableViewController,它被嵌入在navigationViewController 中。这就是为什么应该推动 segue 而不是执行模态转换的原因。

【讨论】:

【参考方案2】:

我遇到了同样的问题,马修的解释似乎是正确的。

替换:

[self presentViewController:newController animated:YES completion:nil];

与:

[self.navigationController pushViewController:newController animated:YES];

【讨论】:

【参考方案3】:

这一行:

[self presentViewController:newController animated:YES completion:nil];

将执行 MODAL segue,这就是错误的原因。

使用这一行代替

[self.navigationController pushViewController:newController animated:YES];

通过将新视图控制器“推送”到导航控制器堆栈上来执行转场(在 XCode 6 及更高版本中,这与在情节提要上定义转场类型“显示”相同)。这就是您在使用导航控制器时需要它的原因。

【讨论】:

以上是关于应用程序试图以模态方式呈现一个活动控制器 ios的主要内容,如果未能解决你的问题,请参考以下文章

错误 - 目标 C - '应用程序试图以模态方式呈现活动控制器 <splitViewDetailViewController:'

使用 UIAlertController 在 UIImagePicker 中“应用程序试图以模态方式呈现活动控制器”

ios:应用程序试图在目标上呈现一个 nil 模态视图控制器

iOS UISearchController 崩溃:应用程序试图在自身上呈现模态视图控制器

应用程序在模态显示视图控制器时崩溃

在 iOS 10 中以模态方式呈现新 VC 时崩溃