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