しばらくの間 Xamarin を使用してきましたが、最新の iPad アプリの開発中に奇妙なクラッシュが発生しています。以下が問題です。
iPad アプリは、2 つのナビゲーション コントローラー (A と B など) を持つストーリー ボードを使用し、それぞれに RootViewCOntroller (A1 と B1 など) があり、A がデフォルトの NavController であり、APP の起動時に表示されます。A1 には 2 つのボタンがあり、ボタン 1 を押すと NavController B が読み込まれます。NavController A のボタン 1 がクリックされたときにコードが実行される手順は次のとおりです。
ボタン イベント ハンドラーで、AppDelegate のパブリック関数を呼び出します。これは次のことを行います。
- StoryBoard iD を取得し、storyboard.InstantiateViewCONtroller を使用して NavController B をインスタンス化します。
- スーパービューから NavCONtroller A を削除します (UIView.View.RemoveSuperView() を使用)。
- 上記の B の参照を appdelegate ウィンドウのルート ビュー コントローラー (NavCOntroller B のルート ビュー コントローラー B1 をロードする) に割り当てます。
上記の手順までは正常に動作します (rootviewcontroller の UiView が iPad にロードされていることがわかります)。
次のステップでは、インスタンス化した後に別の UiViewController をプッシュしようとしています。このステップ.!! WEIRD!!!!. 以下は簡略化されたコードです。
public void SetNavControllerB(UINavigationController navA, UiStoryBoard StoryBoard)
{
navA.View.RemoveFromSuperView();
this.Window.RootViewController = (UiNavigationController)StoryBoard.InstantiateViewController("VC0");
// 'VC0' is the identifier for NavigationController B with RootViewController as "VC1"
// It works great till the above step
UiViewController vc2 = (UiViewController)StoryBoard.InstantiateViewController("VC2");
((UINavigationController)this.Window.RootViewController).PushViewController(vc2, true);
//The above executes with out any exception, but it crashes later.
}
助けてください!