_viewControllerForSupportedInterfaceOrientationsWithDismissCheck无法识别的选择器

时间:2014-09-29 12:52:51

标签: ios objective-c

我在最终视图控制器(portait)上出现一个图像,屏幕上的所有内容,如果我转动设备格局,并且在景观上,它仍然可以,但是;

如果我然后使用SLComposeViewController(用于Twitter发布),一旦我解雇(取消或发布内容)然后旋转手机横向,应用程序崩溃时出现以下错误;

  

* 由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:   ' - [_ UIAppearanceCustomizableClassInfo   _viewControllerForSupportedInterfaceOrientationsWithDismissCheck:]:无法识别的选择器发送到实例0x1b9eefd0'

虽然我不使用横向模式,但当我将其转向横向时,应用确实会转向,但这不是主要问题,问题是应用程序崩溃。

虽然我知道如果用户在发布到Twitter后没有转动手机会很好,但这并不理想,而且我确定你确定你同意的事情。

关于方向支持,AppDelegate.m有此;

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationMaskPortrait |UIInterfaceOrientationMaskPortraitUpsideDown;
}

崩溃的控制器有这个;

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    NSString *viewControllerClassName = [NSString stringWithUTF8String:object_getClassName(window.rootViewController)];
    if ([viewControllerClassName isEqualToString:@"_UIAlertShimPresentingViewController"])   {
        return UIInterfaceOrientationMaskPortrait;
    }
    else {
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
    }
}

-(BOOL)shouldAutorotate{
    return NO;
}

2 个答案:

答案 0 :(得分:4)

当您从UIActionSheet呈现模态视图控制器并且您关闭模态视图控制器并旋转屏幕时,我也在iOS 8中看到了类似的崩溃。

我认为它与呈现模态视图控制器有关。用于延迟模态视图控制器的演示的上述修复肯定有效,

而不是从actionSheet调用当前的Modal View控制器:clickedButtonAtIndex:UIActionSheet的委托方法,从" actionSheet didDismissWithButtonIndex:"并为我工作。

答案 1 :(得分:2)

我在iOS8上看到类似的问题,在模态视图控制器被解除并且电话随后被旋转后应用程序崩溃。

在我的情况下,模式视图控制器是从actionSheet中的一个操作表中显示的:clickedButtonAtIndex:方法。我发现的解决方法是将提供模态视图控制器的代码从该方法移到新方法中并异步调用它,即[self performSelector:@selector(presentModalViewController) withObject:nil afterDelay:1.0];

不确定为什么会有所作为,但它确实让动作表在模态视图控制器出现之前动画出来,这可能会产生一些影响。