2

在我的 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];
}
4

0 回答 0