我們已經使用Xamarin一段時間了,它在開發最新的iPad應用程序時導致了一次奇怪的崩潰。以下是問題:Monotouch崩潰:用B替換UINavigationController A並在B上推UiViewControllers
ipad應用程序使用故事板與2導航控制器(說A和B)每個都有一個RootViewCOntroller(說A1和B1),與A作爲默認NavController,並顯示在APP啓動。 A1上有2個按鈕,按下按鈕1加載NavController B.這裏是單擊NavController A上的按鈕1時代碼執行的步驟。
在按鈕事件處理函數,我調用AppDelegate的公共功能,執行以下操作:
- 獲取故事板ID和使用storyboard.InstantiateViewCOntroller實例化NavController B中。
- 從它的父卸下NavCOntroller A(使用UIView.View.RemoveSuperView())
- 分配B與的appdelegate窗口的根視圖控制器以上參考(它加載NavCOntroller B的rootview控制器B1)。
它工作正常,直到上述步驟(我可以看到rootviewcontroller的UiView加載在iPad上)。 (因爲我的目標是2顯示在層次結構中的第二個屏幕)(storyboard.InstantiateViewController(標識符)。這應該理想地顯示我推入的視圖控制器。但是, 。這一步之後,應用程序崩潰!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.
}
Pleaseeeee幫助!!!!!!
Jonathan,感謝您的回覆。你的回答幫助我進一步移動。我修改爲以下內容: UINavigationController uiNav = storyBoard.InstantiateViewController(「vc0」); uiNav.SetViewControllers(new UiViewController [] {uiNav.ViewController [0],storyBoard.InstantiateviewController(「vc2」)},true); 令人驚訝的是APP顯示Navcontroller B的第二個VC,沒有任何崩潰。然而它引發了另一個問題: –
繼續上面的評論: 當按下VC2上的後退按鈕時,應用程序崩潰。 我已經實現了一個自定義的swipe right segue(執行與'back'按鈕相同的功能(彈出viewcontroller))。當我向右滑動時,它也在那裏崩潰。 你有沒有發現任何可疑?再次感謝你。 –