我有一个视图,当用户将手机翻转为Landscape时会显示该视图。它由一个UIViewController呈现,它通过使用PresentViewController()在导航控件堆栈之上。
它可以正常工作,直到用户通过从手机屏幕顶部向下拖动来下拉通知中心,然后应用程序立即崩溃并显示MonoTouchException和消息:
“抛出Objective-C异常。名称:NSInvalidArgumentException原因:应用程序尝试以模态方式呈现活动控制器”
在任何其他视图中下拉通知中心时不会发生此崩溃,但所有其他视图都在导航控制器的堆栈上,而不是以模态方式显示。
答案 0 :(得分:2)
通过更多调试来计算出来:
我订阅了UIDeviceOrientationDidChangeNotification以找出手机何时被旋转并调用“DeviceRotated()”方法。
事实证明,当你下拉通知中心时,此通知会再次被触发,即使手机没有实际改变轮换。我的代码没有预料到这一点,所以它试图在显示时再次呈现相同的Landscape View,并抛出异常。
我将&& (this.PresentedViewController == null || this.PresentedViewController == this)
添加到if-then
,以测试适当情况以呈现横向视图,然后崩溃就消失了。