【发布时间】:2017-07-26 10:20:53
【问题描述】:
我正在处理推送通知。现在当应用程序被提升到设备并且当我点击它时。我想将 3 ViewController 推送到 Navigation Stack。
所以我使用下面的代码来做到这一点。
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.
我的解决方案:
当我在谷歌上搜索时,有人说从每个 ViewController ViewDidAppear 方法中依次打开 ViewController 但我不确定这是否正确。
感谢任何帮助。
【问题讨论】:
-
尝试在某种延迟后推送所有控制器。它可能不会使应用程序崩溃。
-
发布了答案但将其删除(没有注意到它是针对 xamarin 的)。话虽如此...
UINavigationController包括一个将多个控制器建立为子控制器的方法(func setViewControllers(_ viewControllers: [UIViewController], animated: Bool))。我对 xamarin 一无所知,但也许该方法也在那里桥接(?) -
刚刚检查了 Xamarin 的文档...方法 exists for sure。所以你需要类似
nav.SetViewControllers([controllers], true) -
@Alladinian check Lope answer if I push Viewcontroller without Animation is open All Viewcontroller but after that it crash without crash log.
-
@Ironman 对不起,但我不明白......洛佩的回答使用了完全不同的方法......如果你想将多个子控制器添加到你的导航堆栈
SetViewControllers是要走的路...
标签: ios push-notification xamarin.ios viewcontroller appdelegate