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

时间:2013-11-10 20:52:28

标签: ios objective-c segue modalviewcontroller viewcontroller

我试图使用父视图控制器设置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];
}

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

替换:

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

使用:

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

答案 2 :(得分:2)

这一行:

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

将执行一个MODAL segue,这就是错误。

使用此行代替

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

通过推送&#39>执行segue。一个新的视图控制器到导航控制器堆栈上(在XCode 6及更高版本中,这与在故事板上定义一个segue类型的' show'相同)。这就是您在使用导航控制器时需要这个的原因。