2

当用户将手机翻转到横向时,我有一个视图。它由位于导航控件堆栈顶部的 UIViewController 使用 PresentViewController() 呈现。

它工作正常,直到用户通过从手机屏幕顶部向下拖动来拉下通知中心,然后应用程序立即崩溃并出现 MonoTouchException 和消息:

“引发了 Objective-C 异常。名称:NSInvalidArgumentException 原因:应用程序试图以模态方式呈现活动控制器”

在任何其他视图中拉下通知中心时不会发生此崩溃,但所有其他视图都在导航控制器的堆栈上并且没有模态显示。

4

1 回答 1

2

通过更多的调试弄清楚了:

我订阅了 UIDeviceOrientationDidChangeNotification 以了解手机何时旋转并调用“DeviceRotated()”方法。

事实证明,当您拉下通知中心时,即使手机没有物理更改旋转,此通知也会再次触发。我的代码没有预料到这一点,所以它试图在它已经显示时再次呈现相同的景观视图,并引发了异常。

我在测试中添加&& (this.PresentedViewController == null || this.PresentedViewController == this)if-then正确的环境来呈现景观视图并且崩溃消失了。

于 2012-05-28T22:29:19.953 回答