当用户将手机翻转到横向时,我会呈现一个 View 。它由位于导航控制堆栈顶部的 UIViewController 使用 PresentViewController() 呈现。
它工作正常,直到用户通过从手机屏幕顶部向下拖动来下拉通知中心,然后应用程序立即崩溃,并出现 MonoTouchException 和消息:
“抛出 Objective-C 异常。名称:NSInvalidArgumentException 原因:应用程序尝试以模态方式呈现事件 Controller ”
在任何其他 View 中下拉通知中心时,不会发生此崩溃,但所有其他 View 都位于导航 Controller 的堆栈上,并且不以模态方式呈现。
最佳答案
通过更多的调试解决了这个问题:
我订阅了 UIDeviceOrientationDidChangeNotification 以了解手机何时旋转并调用“DeviceRotated()”方法。
事实证明,当您拉下通知中心时,即使手机没有实际改变旋转方向,此通知也会再次触发。我的代码没有预料到这一点,因此它尝试在已经显示的情况下再次呈现相同的景观 View ,并引发异常。
我将 && (this.PresentedViewController == null || this.PresentedViewController == this)
添加到 if-then
中,用于测试正确的情况来呈现景观 View 和崩溃消失了。
关于ios5 - "Application tried to present modally an active controller"当用户下拉通知中心时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790928/