0

Je travaille sur la notification push. Maintenant, quand l'application est montée sur le périphérique et quand je tape dessus. Je veux pousser 3 ViewController à la pile de navigation. Donc, j'utilise le code ci-dessous pour cela.Pousser plus de 3 ViewController dans NavigationController de AppDelegate App crash

AppDelegate.cs code

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); 
} 

Le code supérieur fonctionne bien pour ouvrir ViewController spécifique.

Mais mon application plante après le crash.

Crash Report:

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. 

Ma solution:

Quand je recherche sur Google et que quelqu'un dit que l'Open ViewController l'un après l'autre de chaque méthode ViewController ViewDidAppear mais je ne suis pas sûr Si c'est correct.

Toute aide soit appréciée.

+0

Essayez de pousser tout le contrôleur après un certain retard. Il pourrait ne pas planter l'application. – Nirmalsinh

+0

a publié une réponse mais l'a supprimée (n'a pas remarqué c'est pour xamarin). Cela étant dit ... 'UINavigationController' inclut une méthode pour établir plusieurs contrôleurs en tant qu'enfants (' func setControllers (_ viewControllers: [UIViewController], animé: Bool) '). Je ne sais rien à propos de xamarin mais peut-être que la méthode y est également connectée (?) – Alladinian

+0

Il suffit de vérifier la documentation de Xamarin ... La méthode [existe à coup sûr] (https://developer.xamarin.com/api/member/UIKit.UINavigationController .SetViewControllers/p/UIKit.UIViewController []/System.Boolean /). Donc vous avez besoin de quelque chose comme 'nav.SetViewControllers ([controllers], true)' – Alladinian

Répondre

0

Vous ne pouvez pas appuyer sur plus d'un contrôleur de vue avec animation. Si vous voulez que l'utilisateur voie les transitions A -> B -> C, vous devez le faire dans la méthode viewDidAppear de A et B.

Si vous voulez l'utilisateur de ne voir que le dernier contrôleur vue C et être en mesure de revenir en arrière par A et B, vous pouvez les pousser à la fois, mais vous devez le faire sans l'animation:

nav.PushViewController(webController2, false); 

une autre option consiste à utiliser SetViewControllers comme ceci:

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

cela poussera les 3 contrôleurs de vue en même temps et que l'on sera plus élevé animée en utilisant la transition de poussée. Je ne pense pas que cela corresponde à votre situation, juste en l'ajoutant ici pour l'intégralité.

+0

Eh bien, j'essaie votre solution. – Ironman

+0

ouvrir tout ViewController est bien, mais maintenant il aussi Crash sans rapport de crash. – Ironman

+0

S'il plante, même sans animation, le problème peut être ailleurs. Avez-vous toujours des avertissements sur la console? – Lope