解雇ios6中的modalViewcontroller错误

时间:2012-09-28 14:03:04

标签: iphone objective-c ios ios6 modalviewcontroller

我在ios6中遇到了关于解雇modalViewController的问题

以下是我分享的代码段:

   UIViewController *controller=appdelegate.navigationController.topViewController;

   if(kDeviceVersion>=5.0){

     if(controller.parentViewController){

        if(controller.parentViewController.parentViewController){

            [controller.parentViewController.parentViewController dismissViewControllerAnimated:NO completion:nil];

        }

        [controller.parentViewController dismissViewControllerAnimated:NO completion:nil];

    }

}
else{

    if(controller.parentViewController){

        if(controller.parentViewController.parentViewController){

            [controller.parentViewController.parentViewController dismissModalViewControllerAnimated:NO];

        }

        [controller.parentViewController dismissModalViewControllerAnimated:NO];

    }

}

此代码在ios4.0到ios 5.1.1上运行良好。但未能在ios6上工作。 那些我想解雇的模态视图控制器并没有被解雇。而是显示此错误。

尝试关闭当前未显示视图的模式视图控制器。 self = UINavigationController:0xa947440 modalViewController = UINavigationController:0x8c36170

但是当我尝试使用presentModalViewController呈现该视图控制器时,它显示

警告:尝试在UINavigationController上呈现:0xa947440已经呈现UINavigationController:0x8c36170

请建议我为ios6做什么以及如何解决此问题。

2 个答案:

答案 0 :(得分:1)

从你的问题中不清楚哪个VC呈现你要解雇的VC。但是,我建议始终遵循这条规则:

从提出它的VC中解雇。因此,例如,如果VC0呈现VC1,那么也从VC0中解除VC1。这也是Apple推荐的方式,您可以在此处查看一个非常相关的问题的答案opening and closing other UIViewControllers - any other approaches than to use protocol & delegate?

答案 1 :(得分:0)

我没有使用模态视图控制器,而是使用导航控制器并使用CAAnimation而不是现有的模态视图控制器来推送视图

而不是这个-----

    ShareViewController *share=[[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
    UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:share];
    share.modalPresentationStyle=UIModalPresentationFormSheet;
    share.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:nav animated:YES];

    [share release];
    [nav release];

我们可以使用这个

    ShareViewController *share=[[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];

    CATransition* transition = [CATransition animation];
    transition.duration = 0.4;
    transition.type = kCATransitionFade;
    transition.subtype = kCATransitionFromTop;

    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
    [self.navigationController pushViewController:share animated:NO];

    [share release];