massage "alert"

Bonjour,
je travaille sur un programme avec SQlite.
Mais je cherche depuis 2 jours une solution pour résoudre le message d'erreur qui s'affiche lors de la demande d'affichage d'un message d'alerte :

<Bibliotheque.ViewController: 0x7f834d82fc00> whose view is not in the window hierarchy!

Je n'ai qu'un seul viewController.
Merci par votre aide

Réponses

  • T'as pensé à demander à une japonaise ?

  • CéroceCéroce Membre, Modérateur

    En général, on a ce message parce qu'on essaie de faire quelque chose avec un UIViewController qui n'est pas encore affiché, souvent parce que l'animation de son affichage n'est pas encore terminée.

    La méthode UIViewController.present(_:animated:completion:) prend une closure de complétion qui est appelée lorsque l'animation se termine. Il faut l'utiliser.

  • klogklog Membre
    février 2018 modifié #4

    @Draken a dit :
    T'as pensé à demander à une japonaise ?

    :D
    À Taïwan aussi, y a plein de massage alert...

  • @klog a dit :

    @Draken a dit :
    T'as pensé à demander à une japonaise ?

    :D
    À Taïwan aussi, y a plein de massage alert...

    Oui, mais j'ai un faible pour les japonaises ..

  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2018 modifié #6

    Tu a mis du code dans l'init(…) ? Ou, au moins, avant que viewDidLoad est appelé ?

    Qu'est-ce que tu fais pour afficher l'alerte ?

  • J'appelle le message dans une fonction au cours de mon programme.
    j'appelle

    alerteChargementTableau()

    qui est:

    func alerteChargementTableau() {
                            var alertController:UIAlertController?
                            alertController = UIAlertController(title: "", message: "remplir le tableau", preferredStyle: .alert)
                            present(alertController!, animated: true, completion: nil)
                            let firstAction = UIAlertAction(title: "OK ",
                                                            style: UIAlertActionStyle.cancel,
                                                            handler: {(paramAction:UIAlertAction!) in
                                                               .....
                            })
    
                            alertController!.addAction(firstAction)
                            self.present(alertController!,animated: true, completion: nil)
                        }
    
  • @Joanna Carter a dit :
    Tu a mis du code dans l'init(…) ? Ou, au moins, avant que viewDidLoad est appelé ?

    Visiblement oui... La preuve :

    @jean-luc a dit :

    func alerteChargementTableau() {
                            var alertController:UIAlertController?
                            alertController = UIAlertController(title: "", message: "remplir le tableau", preferredStyle: .alert)
    
  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2018 modifié #9
    Mais d'où tu appelles alerteChangementTableau() ?
  • je viens de modifier mon code
    je crée l'alerte dans viewDidAppear
    et pour appeler l'alerte

          DispatchQueue.main.async{
          self.present(self.alerteChargementTableau!, animated: true, completion: nil)
          }
    

    je ne sais pas si la manière est la plus élégante, mais il semble que cela fonctionne

  • ! 😡
    Et encore je suis poli ..

  • Peut-être que ça marche mais le moyen utilisé semble brouillon et tricky. Il faudrait copier le contenu du fichier en entier pour qu'on ai une vision plus globale de ce que tu fais réellement.

  • Joanna CarterJoanna Carter Membre, Modérateur

    Et, en plus, je ne comprends pas pourquoi tu as utilisé DispatchQueue.main.async.

    Peut-être tu devine comment le faire sans comprehension ?

  • Merci pour vos réponses. j'avais abandonné mon ordinateur quelques jours.
    En effet, je procède plus par recherche, sans vraiment toujours rentrer dans le détail.
    Dans sa globalité , et pour un néophyte comme moi, la programmation Swift ne me paraît pas à ma portée (enfin sans aide extérieure). Et c'est sans parler de la synthaxe informatique :)
    D'autant plus, qu'il faut parfois que je parle "php".

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