因IOS版本导致的模态视图控制器dismissModalViewControllerAnimated调用问题
2012-07-03 17:01
721 查看
今天用模态视图控制器(Modal View Controller)时遇到了一个很狗血的问题,按理说presentModalViewController和dismissModalViewControllerAnimated应该成对出现,一般情况下presentModalViewController会在parentViewController被直接调用,用来弹出一个新视图;而dismissModalViewControllerAnimated则一般在childViewController用来dismiss自己,它的原理是将dismiss消息转发给了parentViewController进行dismiss,问题就在怎将dismiss消息转发给parentViewController,以前我一直以为是
之前在(Xcode4.0)模拟器(iphone 4.3)上跑了也没问题,今天换了台mac(Xcode4.2)上机器(IOS5)时却发现不管用了,赶紧查资料,果然是系统版本问题:
于是回自己机器(Xcode4.0)试着改为
结果Xcode(4.0)直接报错,说找不着presentingViewController,改为
警告可能不响应presentingViewController,不管了,先在模拟器(iphone 4.3)上跑,发现不行(Xcode4.0没有iphone 5.0模拟器)!赶紧换到Xcode4.2的那个机器,跑iphone 5.0模拟器发现可以,连警告都没有,可是一跑iphone 4.3模拟器又悲剧了,这让人情何以堪,无奈我只能调用前先判断一下:
跑了一下,发现两个模拟器总算不蹦了,上机器两个也算都正常了。最终完美的方案是使用Xcode 4.2代码写成:
最后总结一下:IOS5后有很多旧的函数方法已经被新的函数方法所取代,但是目前的开发我们还要兼顾部分的IOS4的用户,所以有些变更的函数方法我们就得留意,在自己不确定一个函数是否被支持时最好用respondsToSelector检测一下其是否响应。另外Xcode也是能升级到最新版本就升级到最新版本以避免我遇到的麻烦。
[self.parentViewController dismissModalViewControllerAnimated:YES];
之前在(Xcode4.0)模拟器(iphone 4.3)上跑了也没问题,今天换了台mac(Xcode4.2)上机器(IOS5)时却发现不管用了,赶紧查资料,果然是系统版本问题:
[self.parentViewController dismissModalViewControllerAnimated:YES]; (ios5前) [self.presentingViewController dismissModalViewControllerAnimated:YES]; (ios5后)
于是回自己机器(Xcode4.0)试着改为
[self.presentingViewController dismissModalViewControllerAnimated:YES];
结果Xcode(4.0)直接报错,说找不着presentingViewController,改为
[[self presentingViewController] dismissModalViewControllerAnimated:YES];
警告可能不响应presentingViewController,不管了,先在模拟器(iphone 4.3)上跑,发现不行(Xcode4.0没有iphone 5.0模拟器)!赶紧换到Xcode4.2的那个机器,跑iphone 5.0模拟器发现可以,连警告都没有,可是一跑iphone 4.3模拟器又悲剧了,这让人情何以堪,无奈我只能调用前先判断一下:
if ([self respondsToSelector:@selector(presentingViewController)]) { [[self presentingViewController] dismissModalViewControllerAnimated:YES]; } else { [[self parentViewController] dismissModalViewControllerAnimated:YES]; }
跑了一下,发现两个模拟器总算不蹦了,上机器两个也算都正常了。最终完美的方案是使用Xcode 4.2代码写成:
if ([self respondsToSelector:@selector(presentingViewController)]) { [[self presentingViewController] dismissModalViewControllerAnimated:YES]; } else { [[self parentViewController] dismissModalViewControllerAnimated:YES]; }
最后总结一下:IOS5后有很多旧的函数方法已经被新的函数方法所取代,但是目前的开发我们还要兼顾部分的IOS4的用户,所以有些变更的函数方法我们就得留意,在自己不确定一个函数是否被支持时最好用respondsToSelector检测一下其是否响应。另外Xcode也是能升级到最新版本就升级到最新版本以避免我遇到的麻烦。
相关文章推荐
- [问题记录]'dismissModalViewControllerAnimated:' is deprecated: first deprecated in iOS 6.0
- [ios]presentModalViewController和dismissModalViewControllerAnimated汇总
- IOS UI:弹出视图/弹出模态 presentViewController与presentModalViewController(增加IOS 6.0说明)
- iOS开发视图控制器(ViewController)调用[super viewXXX]的简单理解
- iOS 视图在调用popToRootViewControllerAnimated:时uitabBar出现叠加
- IOS UI:弹出视图/弹出模态 presentViewController与presentModalViewController(增加IOS 6.0说明)
- iOS解决使用模态视图 导致无法pushViewController
- IOS学习 ModalViewController模态视图的创建 两视图间用代理方式<传值>
- iOS解决使用模态视图 导致无法pushViewController
- ios中使用PresentModalViewController和dismissModalViewControllerAnimated的总结
- A 控制器 Push 到 B 控制器 presentViewController(modal模态)到C控制器
- popViewControllerAnimated时未调用viewWillAppear问题
- iOS 笔记三: UITextView和视图控制器生命周期(View Controller LifeCycle)
- iOS 跳转出现attempt to dismiss modal view controller whose view does not currently ……的解决方案
- IOS-44-解决用模态方式presentViewController推出页面时导航栏消失问题
- iOS presentViewController:animated:completion:延迟问题
- presentModalViewController和dismissModalViewControllerAnimated的使用总结
- "dismissModalViewControllerAnimated" is deprecated : first deprecated in iOS 6.0
- A 控制器 Push 到 B 控制器 presentViewController(modal模态)到C控制器
- 因WKWebview导致视图控制器释放不掉而内存崩溃的问题