whose view is not in the window hierarchy!

Je voulais afficher une alerte après un test ReachAbility.


Mais je reçois le message d'erreur


whose view is not in the window hierarchy!


J'avoue que je ne comprends pas précisément les explications sur différents sites.


Alors si quelqu'un peut m'apporter des informations supplémentaires ?


merci


Jean-Luc


Réponses

  • Tu devrais poster un bout de code pour montrer où ça foire ^^


     


    On dirait que t'essaie d'afficher une vue qui n'est pas là ..


  • jean-lucjean-luc Membre
    février 2017 modifié #3
    Voilà  mon code

     


     


    func reachIdentify() {
    let check = Reach().connectionStatus()
    switch check {
    case .online(.wiFi):
    print("connexion Wifi")
    adresseIP = adresseIPInterne
    infoConnexionLabel.text = "connexion Wifi OK"
    indicWifi = true
    break
    case .online(.wwan):
    print("connexion Wlan")
    indicWifi = false
    infoConnexionLabel.text = "connexion Wlan"
    alertWifi()
    break
    case .offline:
    print ("connexion offline")
    infoConnexionLabel.text = "connexion offline"
    break
    case .unknown:
    print ("connexion unknown")
    infoConnexionLabel.text = "connexion unknown"
    break
    default:
    print ("connexion default")
    infoConnexionLabel.text = "connexion default"
    break
    }
    }

    func alertWifi() {

    var alertController:UIAlertController?
    alertController = UIAlertController(title: "Attention", message: "activer Wifi !", preferredStyle: .alert)

    let firstAction = UIAlertAction(title: "je renonce ",
    style: UIAlertActionStyle.cancel,
    handler: nil
    )

    let secondAction = UIAlertAction(title: " OK ",
    style: UIAlertActionStyle.default,
    handler: {(paramAction:UIAlertAction!) in

    })

    alertController!.addAction(firstAction)
    alertController!.addAction(secondAction)
    self.present(alertController!,animated: true, completion: nil)

    }

    et le message d'erreur


     

    connexion Wlan


    2017-02-01 16:19:33.633307 telecommande_Iphone[2146:525341] Warning: Attempt to present <UIAlertController: 0x100c09eb0> on <telecommande_Iphone.ViewController: 0x100b08600> whose view is not in the window hierarchy!


     


    le message d'alerte ne s'affiche pas


  • Alf1996Alf1996 Membre
    février 2017 modifié #4

    Tu as du demander l'affichage de ton alertView alors que tu es en train de quitter la vue en cours....




  • alors que tu es en train de quitter la vie en cours....




    Ce serait donc un message d'avertissement anti-suicide ?

  • GoodGoodGoodGood Membre
    février 2017 modifié #6

    Pourrais tu afficher le code de tous le controller stp ?  Car j'ai l'impression que le controller n'est pas afficher. Très bizarre 


  • jean-lucjean-luc Membre
    février 2017 modifié #7

    voilà  le code complet



    import UIKit

    var indicWifi: Bool = false
    let adresseIPInterne: String = ""
    var adresseIP: String = ""

    class ViewController: UIViewController {

    @IBOutlet weak var infoConnexionLabel: UILabel!

    override func viewDidLoad() {
    super.viewDidLoad()
    reachIdentify()
    gestureInit()


    }


    func gestureInit() {
    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped(_gestureRecognizer:)))
    swipeUp.direction = UISwipeGestureRecognizerDirection.up
    self.view.addGestureRecognizer(swipeUp)

    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped(_gestureRecognizer:)))
    swipeDown.direction = UISwipeGestureRecognizerDirection.down
    self.view.addGestureRecognizer(swipeDown)

    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped(_gestureRecognizer:)))
    swipeLeft.direction = UISwipeGestureRecognizerDirection.left
    self.view.addGestureRecognizer(swipeLeft)

    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped(_gestureRecognizer:)))
    swipeRight.direction = UISwipeGestureRecognizerDirection.right
    self.view.addGestureRecognizer(swipeRight)
    }

    func swiped(_gestureRecognizer: UIGestureRecognizer) {

    if let swipeGesture = _gestureRecognizer as? UISwipeGestureRecognizer {

    switch swipeGesture.direction {

    case UISwipeGestureRecognizerDirection.up:
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "IDSwitchViewController")
    self.present(controller, animated: true, completion: nil)
    break
    case UISwipeGestureRecognizerDirection.down:
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "IDSwitchViewController")
    self.present(controller, animated: true, completion: nil)
    break
    case UISwipeGestureRecognizerDirection.left:
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "IDAppleTVViewController")
    self.present(controller, animated: true, completion: nil)
    break
    case UISwipeGestureRecognizerDirection.right:
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "IDWesternViewController")
    self.present(controller, animated: true, completion: nil)
    break
    default:
    break
    }
    }
    }




    func reachIdentify() {
    let check = Reach().connectionStatus()
    switch check {
    case .online(.wiFi):
    print("connexion Wifi")
    adresseIP = adresseIPInterne
    infoConnexionLabel.text = "connexion Wifi OK"
    indicWifi = true
    break
    case .online(.wwan):
    print("connexion Wlan")
    indicWifi = false
    infoConnexionLabel.text = "connexion Wlan"
    alertWifi()
    break
    case .offline:
    print ("connexion offline")
    infoConnexionLabel.text = "connexion offline"
    break
    case .unknown:
    print ("connexion unknown")
    infoConnexionLabel.text = "connexion unknown"
    break
    default:
    print ("connexion default")
    infoConnexionLabel.text = "connexion default"
    break
    }
    }

    func alertWifi() {

    var alertController:UIAlertController?
    alertController = UIAlertController(title: "Attention", message: "activer Wifi !", preferredStyle: .alert)

    let firstAction = UIAlertAction(title: "je renonce ",
    style: UIAlertActionStyle.cancel,
    handler: nil
    )

    let secondAction = UIAlertAction(title: " OK ",
    style: UIAlertActionStyle.default,
    handler: {(paramAction:UIAlertAction!) in

    })

    alertController!.addAction(firstAction)
    alertController!.addAction(secondAction)
    self.present(alertController!,animated: true, completion: nil)

    }

    }

    je veux afficher une alerte lorsque mon appareil n'est pas connecté Wifi


  • Joanna CarterJoanna Carter Membre, Modérateur
    Mais en utilisant les balises code stp
  • Joanna CarterJoanna Carter Membre, Modérateur
    Voilà  ! Tu es en viewDidLoad, qui est appelé avant l'apparition de la vue.
  • peut-tu me donner des précisions ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    Tu doit mettre l'appel à  reachIdentify dans viewDidAppear
  • Merci pour cette correction, (ça marche)


    bonne soirée

  • C'était pas en quittant la vue mais en la créant... En fait ce message signifie que tu essaye d'afficher une vue (ici un alertView) sur une vue qui n'existe plus ou pas encore (vue en cours de fermeture, ou en cours d'ouverture).


Connectez-vous ou Inscrivez-vous pour répondre.