0

我正在推送推送通知。现在,当应用程序被提升到设备和当我点击它。我想将3个ViewController推送到导航堆栈。从AppDelegate在NavigationController中推送3个以上的ViewController应用程序崩溃

所以我使用下面的代码来做到这一点。

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. 

我的解决方案:

,当我在谷歌搜索,所以有人说,打开视图控制器陆续从各个视图控制器ViewDidAppear方法,但我不知道如果这是正确的方式。

任何帮助被赞赏。

+0

尝试在某种延迟后推送所有控制器。它可能不会使应用程序崩溃。 – Nirmalsinh

+0

发布了一个答案,但删除了它(没有注意到它是为xamarin)。话虽如此......'UINavigationController'包括一个方法来建立多个控制器作为孩子('func setViewControllers(_ viewControllers:[UIViewController],animated:Bool)')。我对xamarin一无所知,但也许这种方法桥接在那里(?) – Alladinian

+0

刚刚检查了Xamarin的文档...方法[肯定存在](https://developer.xamarin.com/api/member/UIKit.UINavigationController .SetViewControllers/p/UIKit.UIViewController []/System.Boolean /)。所以你需要像'nav.SetViewControllers([controllers],true)' – Alladinian

回答

0

您不能用动画推送多个视图控制器。如果您希望用户看到转换A→B→C,则必须在A和B的viewDidAppear方法中执行此操作。

如果希望用户只能看到最后一个视图控制器c,并能够通过A和B回去,你可以一次把他们所有,但你需要做没有动画:

nav.PushViewController(webController2, false); 

另一种选择是使用SetViewControllers这样的:

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

这将推动所有3个视图控制器在同一时间只有最上面的一个将利用推过渡动画。我不认为这符合你的情况,只是为了完整而在此添加它。

+0

以及我尝试你的解决方案。 – Ironman

+0

打开所有ViewController是好的但现在它也没有崩溃报告崩溃。 – Ironman

+0

如果即使没有动画也会崩溃,问题可能在其他地方。你仍然会警告控制台吗? – Lope

相关问题