因IOS版本导致的模态视图控制器dismissModalViewControllerAnimated调用问题
来源:互联网 发布:液压计算软件 编辑:程序博客网 时间:2024/06/05 01:51
今天用模态视图控制器(Modal View Controller)时遇到了一个很狗血的问题,按理说presentModalViewController和dismissModalViewControllerAnimated应该成对出现,一般情况下presentModalViewController会在parentViewController被直接调用,用来弹出一个新视图;而dismissModalViewControllerAnimated则一般在childViewController用来dismiss自己,它的原理是将dismiss消息转发给了parentViewController进行dismiss,问题就在怎将dismiss消息转发给parentViewController,以前我一直以为是
[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也是能升级到最新版本就升级到最新版本以避免我遇到的麻烦。
- 因IOS版本导致的模态视图控制器dismissModalViewControllerAnimated调用问题
- 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
- 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
- 因JDK版本冲突导致问题的一系列解决方案
- 关掉rockmongo因PHP版本问题导致的警告显示
- iOS视图控制器初始化问题
- Quartz因不同版本导致的异常
- ECSHOP因PHP版本导致的错误
- 视图调用控制器的方法
- ios--视图控制器的基本概念
- ios--视图控制器的创建
- iOS 视图控制器的生命周期
- IOS视图控制器的生命周期
- iOS视图控制器的生命周期
- iOS视图控制器的生命周期
- 因部署版本不一致导致的WEB和手机端APP数据冲突混乱问题
- HttpURLConnection 因Android版本不同而导致的Bad Request问题,在2.0+不行,4.0+可以
- 解决因flash版本升级而导致FaustCplus生成不了预览图片的问题
- 在Unity3D中动态创建对象和创建Prefab原型对象的三种方式
- VxWorks下使用双向链表lstLib的小例子
- Windows下的RMAN备份
- 关于Oracle的BLOB、CLOB字段的操作方法(分JDBC和Hibernate两种)
- 作为软件工程师,你必须知道的20个常识
- 因IOS版本导致的模态视图控制器dismissModalViewControllerAnimated调用问题
- 马宁的Windows Phone 7.1初体验——XNA与Silverlight集成
- patch
- Oracle RMAN Catlaog 与NoCatalog
- js判断页面值不能为空
- win7 IIS HTTP重定向配置、参数设置
- PHP中常用的数组函数
- 三星I9000挖煤模式和R模式进入方法
- C++程序中调用exe可执行文件【转】