2

MonoTouch 5でプロジェクトを作成しました。MonoTouch6にアップグレードした後、UIViewControllersが自動回転しなくなりました。これらは、tabviewcontroller内でホストされます。この警告が表示されます:

ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)' overrides obsolete member `MonoTouch.UIKit.UIViewController.ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)'. Add the Obsolete attribute to ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)' (CS0672) 

しかし、デバッグ中にメソッドが呼び出されます。新しいShouldAutorotateものが呼び出されることはありません。何か案は?ありがとう!

4

2 に答える 2

2

いくつかの理由が考えられます。RootViewControllerそのうちの 1 つは、AppDelegate で を設定する必要があることです(別のリンクはこちら)。これは、iOS6 より前では必要ありませんでした。

もう 1 つは、以前の iOS バージョンへのフォールバックを維持せずに、新しい iOS6 API の使用を開始しています。それはあなたのコメントと一致します。つまり、 6.0 では動作しますが、 5.1 では動作しません

まだ iOS 5.x をターゲットにしているため、廃止された警告を安全に無視できることに注意してください。iOS 6 では回転を処理する新しい API が導入されましたが、既存のアプリケーションとの互換性を維持するために古い API に自動的にフォールバックします。

これは、新しい (iOS6 のみ) API の使用を開始する場合、古い API を自分で処理する必要があるか、iOS 5.x でローテーションが機能しないことも意味します。

正直なところ、これはテストの悪夢だと思います。iOS にこれを処理させ、ローテーションを処理する単一のコード パスを保持する方がよいでしょう。そのため、デプロイ ターゲットの最小バージョンが iOS 6.0 になるまで、古い API を使用し続けることを強くお勧めします。

于 2013-01-25T18:26:37.430 に答える
0

アップグレード後に同じ問題が発生し、ここで問題の答えが得られました。リンクから引用された問題の核心は次のとおりです。

アプリケーション ウィンドウには、アプリケーションの起動の最後にルート ビュー コントローラーがあることが期待されます。

したがって、以前の私のように、main.cs の FinishedLaunching(UIApplication app) メソッドにこれがある場合:

window.AddSubview(mainVC.View);

これを次のように置き換えます。

window.RootViewController = mainVC;

それでおしまい!幸せな日々!回転が再び機能します。:)少なくともそれは私にとって問題を解決しました。

この小さなことが原因でアプリケーションがうまくいかないことが Apple のせいなのか、Monotouch/Xamarin のせいなのかはわかりませんが、Xamarin チームはこれについて何かをするべきだと思います。確かに、これはコンパイル時に検出および修正できるものでしょうか?

ともかく。この情報により、この問題で私が費やした時間を他の人が節約できることを願っています!

于 2013-08-08T07:56:42.927 に答える