ios6中的解雇modalViewcontroller错误

Posted

技术标签:

【中文标题】ios6中的解雇modalViewcontroller错误【英文标题】:dismissal modalViewcontroller error in ios6 【发布时间】:2012-09-28 14:03:04 【问题描述】:

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

这是我分享的代码 sn-p:

   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 解决此问题。

【问题讨论】:

从哪个控制器显示 modalView。请指定其代码。 【参考方案1】:

从您的问题中不清楚哪个 VC 提供了您想要解雇的 VC。但是,我建议始终遵循此规则:

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

【讨论】:

【参考方案2】:

我没有使用模态视图控制器,而是使用导航控制器并使用 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];

【讨论】:

当我为 navigationController 的 pushViewController 更改 presentModalViewController 时,它会引发 EXC_BAD_ACCESS 异常。这是为什么?是因为我那里已经有 viewControllers 了吗?

以上是关于ios6中的解雇modalViewcontroller错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6 Safari,setInterval 不会被解雇

调整 ModalViewController 的大小并将其定位在 iOS 7 的中心

将值从presentingViewController 传回presentingViewController

ModalViewController 中的 UIImageView 正在忽略 ContentMode - iPhone

从 ModalViewController 更新 splitViewController

ModalViewController 不保存到核心数据?