2

ユーザーが電話を横向きにすると表示されるビューがあります。これは、PresentViewController() を使用してナビゲーション コントロール スタックの最上位にある UIViewController によって提示されます。

ユーザーが電話の画面の上部からドラッグして通知センターをプルダウンするまでは問題なく動作し、アプリは MonoTouchException とメッセージで即座にクラッシュします。

「Objective-C 例外がスローされました。名前: NSInvalidArgumentException 理由: アプリケーションがアクティブなコントローラーをモーダルに提示しようとしました」

このクラッシュは、他のビューで通知センターをプルダウンしても発生しませんが、他のすべてのビューはナビゲーション コントローラーのスタック上にあり、モーダルには表示されません。

4

1 に答える 1

2

もう少しデバッグしてそれを理解しました:

私はUIDeviceOrientationDidChangeNotificationを購読して、電話がいつ回転したかを調べ、「DeviceRotated()」メソッドを呼び出していました。

通知センターをプルダウンすると、電話の回転が物理的に変更されていなくても、この通知が再び発生することがわかりました。私のコードはこれを予期していなかったため、同じランドスケープ ビューが既に表示されている間に再度表示しようとしたため、例外がスローされました。

ランドスケープ ビューを表示するための適切な状況をテストするテストを追加&& (this.PresentedViewController == null || this.PresentedViewController == this)すると、クラッシュはなくなりました。if-then

于 2012-05-28T22:29:19.953 に答える