2017-04-24 1 views
1

swift3, ios xcode8swift3 présent de l'erreur appdelegate: Attention: attemp de présenter ~ dont la vue est pas dans la hiérarchie de la fenêtre

Je crée une application qui appelle un bouton sur un widget pour afficher une page spécifique Par exemple, une application se compose de viewA et viewB, et la première vue est viewA J'essaie de montrer viewB quand j'appuie sur un bouton dans un widget.

Source


let mainStoryboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil) 
let DetailView: Detail_Update_View = mainStoryboard.instantiateViewController(withIdentifier: "Detail_Update_View") as! Detail_Update_View 

let nav2 = UINavigationController.init (rootViewController: DetailView) 
self.window?.rootViewController? .present (nav2, animated: true, completion: nil) 

Ceci est appelé de la fonc open url dans AppDelegate.

Lorsque vous cliquez sur un bouton dans le widget, viewB est appelé initialement. Ouvrez le widget et appuyez sur la touche La page sera appelée mais l'information ne changera pas et l'erreur suivante est affichée

errorMessage


Warning: Attempt to present <UINavigationController: 0x101a1b600> on <SWRevealViewController: 0x101820c00> whose view is not the window hierarchy! 

Si vous faites une premier appel au widget, fermez l'écran viewB (allez à viewA) et cliquez sur le bouton dans le widget pour le faire fonctionner.

s'il vous plaît aidez-moi ..

+0

alors vous devez définir viewcontroller initial story-board. – KKRocks

+0

essayer ceci: http://stackoverflow.com/a/40304837/3901620 – KKRocks

+0

@KKRocks merci pour la réponse. ça ressemble au travail! mais .. Si j'essaie 3 fois, je dois revenir à chaque page en appuyant 3 fois sur le bouton retour. Y a-t-il un moyen d'aller voir ViewA immédiatement? –

Répondre

0
let mainStoryboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil) 
    let DetailView: Detail_Update_View = mainStoryboard.instantiateViewController(withIdentifier: "Detail_Update_View") as! Detail_Update_View 

    let nav2 = UINavigationController.init (rootViewController: DetailView) 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 

    appDelegate.window?.rootViewController?.present (nav2, animated: true, completion: nil) 
+0

merci de votre réponse. mais c'est pareil ... d'abord ta réponse a bien fonctionné. mais avez un problème qui ne peut pas revenir vueA –

+0

Si vous faites le contrôle de navigation pour le contrôleur de vue push que seulement vous pouvez sauter il est contrôleur de vue préréglée, vous pouvez seulement rejeter ce –

+0

désolé .. je ne peux pas comprendre ce que vous voulez dire .. . que devrais-je faire? –