5

我试图在显示它可以提供回调之前使用父视图控制器设置 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];
}

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

4

3 回答 3

4

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

于 2013-11-10T22:24:30.453 回答
3

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

代替:

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

和:

[self.navigationController pushViewController:newController animated:YES];
于 2014-10-28T15:26:36.593 回答
2

这一行:

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

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

改用这一行:

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

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

于 2015-10-12T05:01:15.663 回答