应用程序尝试模式地呈现一个主动控制器ios

我试图设置一个父视图控制器ViewController之前,它显示它可以提供callback,我做了这个使用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.

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

 - (IBAction) buttonClicked { NewViewController *newController = [[NewViewController alloc] init]; [newController setParentViewController:self]; [self presentViewController:newController animated:YES completion:nil]; } 

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

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

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

更换:

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

有:

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

这一行:

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

将执行一个MODAL segue,这是什么给出了错误。

用这条线代替

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

通过将新的视图控制器“压入”导航控制器堆栈(在XCode 6及更高版本中,这与在故事板上定义seguetypes的“show”相同),执行segue。 这就是为什么当你使用导航控制器时你需要这个。

删除这两行代码,不需要设置父级,如果您想要从NewViewController向当前self反向通信,请使用委托。