这里记录一个关于UIApplicationRotationFollowingController的问题。
问题现象:
在MainController的UIActionSheet中选中某一项弹出验证码输入框,需要在弹框时判断当前页面是否为MainController,一般我们会这样判断:
UINavigationController* rootNav = [UIApplication sharedApplication].keyWindow. rootViewController; //判断当前页面是否为MainController if ([rootNav.visibleViewController isKindOfClass:[MainController class]]) { //展示验证码输入框 }
当重复选择UIActionSheet弹出验证码输入框时,有可能出现崩溃。
问题分析:
查看崩溃信息,发现是因为,崩溃信息UIApplicationRotationFollowingController没有visibleViewController属性导致。
所以,需要解决两个问题:
1、为什么出现UIApplicationRotationFollowingController;
答:因为UIActionSheet是在新建的window上展示的,所以keyWindow已经改变了,无法通过[UIApplication sharedApplication].keyWindow获取rootViewController。
2、MainController应该是UINavigationController类型的。
问题解决:
这里给出我遇到此类问题的应对措施,如果不全面,欢迎分享:
1、首先,获取rootViewController方式应该为:
UINavigationController* rootNav = [UIApplication sharedApplication].delegate.window.rootViewController;
2、然后,要确保MainController是UINavigationController类型的,这样先解决了程序崩溃的问题。
//判断当前页面是否为MainController if ([rootNav isKindOfClass:NSClassFromString(@"UINavigationController")] && [rootNav.visibleViewController isKindOfClass:[MainController class]]) { //展示验证码输入框 }