我们使用 Xamarin 已经有一段时间了,它在开发最新的 iPad 应用程序时导致了奇怪的崩溃。以下是问题:
ipad 应用程序使用带有 2 个导航控制器(比如 A 和 B)的故事板,每个控制器都有一个 RootViewCONtroller(比如 A1 和 B1),其中 A 作为默认导航控制器,并在 APP 启动时显示。A1 上有 2 个按钮,按下按钮 1 加载 NavController B。以下是单击 NavController A 上的按钮 1 时代码执行的步骤。
在 Button Event handler 中,我在 AppDelegate 中调用了一个公共函数,该函数执行以下操作:
- 获取 StoryBoard iD 并使用 storyboard.InstantiateViewCONtroller 实例化 NavController B。
- 从其超级视图中删除 NavCONtroller A(使用 UIView.View.RemoveSuperView())
- 将上述 B 的引用分配给 appdelegate 窗口的 Root 视图控制器(加载 NavCOntroller B 的 rootview 控制器 B1)。
在上述步骤之前它工作正常(我可以在 iPad 上看到 rootviewcontroller 的 UiView 负载)。
下一步我试图在实例化后推送另一个 UiViewController。(因为我的目标是 2 显示层次结构中的第二个屏幕)(storyboard.InstantiateViewController(identifier)。理想情况下,这应该向我显示推送的视图控制器。但是应用程序在之后崩溃这一步.!! 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.
}
请帮帮忙!!!!!!