在我的 iPhone 应用程序中,我有两个视图,分别是 VC1 和 VC2。在 VC1 中,我有一个按钮可以导航到 VC2。这是VC1中按钮动作的代码:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (!appDelegate.vc2) {
appDelegate.vc2 = [[VC2 alloc]initWithNibName:@"VC2" bundle:nil];
}
[self presentModalViewController:appDelegate.vc2 animated:NO];
(我必须在 VC2 中保留一些状态,这就是我在 appdelegate 文件中声明 VC2 的原因)
在 VC2 中,为了回去我使用[self dismissModalViewControllerAnimated:NO];
当我重复进入 VC2 并使用按钮操作返回的过程时,没有问题。但我也在我的应用程序中实现了推送通知。因此,当我收到推送时,我在推送通知警报视图的 Ok 按钮单击上发送 nsnotification,并且在 VC1 中编写的接收通知方法将接收事件,导航到 VC2。
我在接收通知方法中使用了与上面相同的代码来导航到 VC2。
我第二次尝试通过单击警报视图的 Ok 按钮导航到 VC2 时出现错误Application tried to present modally an active controller
,并且仅在 iPhone 4S (iO5) 中出现此错误。但如果我使用 VC1 中的按钮操作重复它,它工作正常。
编辑 详细添加代码:
在 appdelegate 文件中,推送通知警报视图确定按钮的操作:
[[NSNotificationCenter defaultCenter] postNotificationName:@"VC1" object:nil];
并在 VC1 中收到通知时:
- (void)recieveNotification:(NSNotification *) notification{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (!appDelegate.menuVC) {
appDelegate.menuVC = [[MenuScreenVC alloc]initWithNibName:@"MenuScreenVC" bundle:nil];
}
[self presentModalViewController:appDelegate.menuVC animated:NO];
}
以及 VC1 中按钮的按钮操作:
- (IBAction)viewMenuScreen:(id)sender{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (!appDelegate.menuVC) {
appDelegate.menuVC = [[MenuScreenVC alloc]initWithNibName:@"MenuScreenVC" bundle:nil];
}
[self presentModalViewController:appDelegate.menuVC animated:NO];
}
在 VC2 中:
- (IBAction)backToVC1:(id)sender{
[self dismissModalViewControllerAnimated:NO];
}