0

私はPush Notificationの作業中です。アプリケーションがデバイスに上がり、それをタップしたとき。 3つのViewControllerをナビゲーションスタックにプッシュしたいNavigationControllerの3つ以上のViewControllerをAppDelegateから押し込むアプリケーションのクラッシュ

私はこれを行うために以下のコードを使用しています。

AppDelegate.csコード

Window = new UIWindow(UIScreen.MainScreen.Bounds); 
Menu = new SlideoutNavigationController(); 

var storyboard = UIStoryboard.FromName("Main", null); 
var webController = storyboard.InstantiateViewController("DashBoardViewController") as DashBoardViewController; 

Menu.MainViewController = new MainNavigationController(webController, Menu); 
Menu.MenuViewController = new MenuNavigationController(new DummyControllerLeft(), Menu) { NavigationBarHidden = false }; 

Window.RootViewController = Menu; 
Window.MakeKeyAndVisible(); 

var storyboarddd = UIStoryboard.FromName("Main", null); 
var webControllerdd = storyboarddd.InstantiateViewController("DashBoardViewController") as DashBoardViewController; 
webControllerdd.reloadNotication(); 

UINavigationController nav = webController.NavigationController; 
var notifyWebController = storyboard.InstantiateViewController("NotificationListViewController") as NotificationListViewController; 
notifyWebController.navigationContoller = nav; 
nav.PushViewController(notifyWebController, true); 

if (type.Equals("Damage Report")) 
{ 
    var webController2 = storyboard.InstantiateViewController("DamageReportViewController") as DamageReportViewController; 
    webController2.DamageReportId = id; 
    webController2.navigationContoller = nav; 
    nav.PushViewController(webController2, true); 
} 
if (type.Equals("Overloss")) 
{ 
    var webController2 = storyboard.InstantiateViewController("OverlossViewController") as OverlossViewController; 
    webController2.PacketId = id; 
    webController2.navigationContoller = nav; 
    nav.PushViewController(webController2, true); 
} 

上部のコードは、特定のViewControllerを開くために正常に動作しています。

しかし、私のアプリケーションはクラッシュログの後でクラッシュします。

クラッシュレポート:

2017-07-26 15:25:18.330 Aastha.iOS[6357:2021514] nested push animation can result in corrupted navigation bar 
2017-07-26 15:25:18.740 Aastha.iOS[6357:2021514] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 

マイソリューション:

私はGoogleで検索し、SO誰かが開き、それぞれのViewController ViewDidAppear方法から別の後のViewController 1が、私はわからないと言っていますこれが正しい方法であれば。

ご了承ください。

+0

何らかの遅延の後にすべてのコントローラを押してみます。アプリがクラッシュすることはありません。 – Nirmalsinh

+0

回答を投稿しましたが、削除しました(xamarinに気付かなかった)。つまり、UINavigationControllerには複数のコントローラを子として設定するメソッドが含まれています( 'func setViewControllerers(_ viewControllers:[UIViewController]、animated:Bool)')。私はxamarinについて何も知らないが、おそらくそのメソッドもそこに橋渡しされているだろうか?( – Alladinian

+0

)Xamarinのドキュメントをちょうだいチェックした。このメソッドは[確かに存在する](https://developer.xamarin.com/api/member/UIKit.UINavigationController .SetViewController/p/UIKit.UIViewController []/System.Boolean /)。したがって、nav.SetViewControllers([コントローラ]、true)のようなものが必要です。 – Alladinian

答えて

0

複数のビューコントローラをアニメーションでプッシュすることはできません。あなたがトランジションA - > B - > Cを見たい場合、実際にはAとBのviewDidAppearメソッドでそれを行う必要があります。

あなただけの最後のビューコントローラCを参照し、AとBを通じて戻ることができるようにユーザーをしたい場合は、あなたが一度にすべてをプッシュすることができますが、アニメーションせずにそれを実行する必要があります。

nav.PushViewController(webController2, false); 

別のオプションこのようなSetViewControllersを使用することです:

nav.SetViewControllers([A, B, C], true); 

これは同時にすべての3ビューコントローラをプッシュするだけで、最上位の1がプッシュ遷移を使用してアニメーションされます。私はこれがあなたの状況に合っているとは思っていません、完全性のためにここに追加してください。

+0

私はあなたの解決策を試してみます。 – Ironman

+0

ViewControllerはすべて開かれていますが、クラッシュレポートなしでもクラッシュします。 – Ironman

+0

アニメーションがなくてもクラッシュしている場合は、別の場所に問題がある可能性があります。まだコンソールに警告が表示されますか? – Lope

関連する問題