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

5

我试图在它显示之前使用PrepareForSegue设置包含父视图控制器的ViewController,以便它可以提供回调功能。

- (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"? - Carl Veazey
1
@CarlVeazey 这不是“应用程序试图以模态方式呈现活动控制器”的重复。谢谢你的建议!:D - user1494994
3个回答

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

3
我遇到了相同的问题,马修的解释似乎是正确的。
替换为:
[self presentViewController:newController animated:YES completion:nil];

使用:

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

2
这行代码:
[self presentViewController:newController animated:YES completion:nil];

会执行MODAL视图切换,这就是导致错误的根本原因。

使用以下这行代码替代:

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

通过将新视图控制器“PUSH”到导航控制器堆栈上来执行segue(在XCode 6及以上版本中,这与在storyboard上定义segue类型“show”是相同的)。这就是为什么当您使用导航控制器时需要它的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接