Erreur suite à une popup - UIAlertController

Bonjour les Codeurs,

Je suis actuellement le cour « créer des apps pour iPhone » pour iOS 12 et j’ai terminé le chapitre 6.3 : Gérer le presse-papier. Vu qu’il y avait eu beaucoup d’informations nouvelles, j’ai decidé d’essayer de faire une App de moi-même qui regrouperait tout ce que j’ai pu apprendre…

Du coup, j’ai mis en place une App avec 3 view Controller (un qui permet d’ajouter une adresse mail avec en dessous la liste des adresses mail enregistrées dans une tableView, un écran de confirmation et un écran qui permet de voir dans une tableView toutes les adresses mail qui ont été supprimées.)

Le problème :

en cherchant un petit peux sur internet j’ai créé une alerte si le format de l’adresse mail n’est pas bon … Et bien sûr c’est cela qui apport un message d’erreur… Cela n’empêche en aucun cas l’exécution ni le « bon » fonctionnement de l’app.

voici le message qui apparait lorsque le UIAlertController est appelé (enfin je crois que c’est à ce moment là) :

2020-10-24 22:39:57.913769-0300 ApliTest[16171:3418794] [LayoutConstraints] Unable to simultaneously satisfy constraints.

Probably at least one of the constraints in the following list is one you don’t want.
Try this:
(1) look at each constraint and try to figure out which you don’t expect;
(2) find the code that added the unwanted constraint or constraints and fix it.

(
"<NSLayoutConstraint:0x6000009ab020 UIView:0x7fe61062d000.width == - 16 (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000009ab020 UIView:0x7fe61062d000.width == - 16 (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2020-10-24 22:39:58.350757-0300 ApliTest[16171:3418794] Warning: Attempt to present <ApliTest.ConfirmAddViewController: 0x7fe610521010> on <ApliTest.ViewController: 0x7fe614807290> which is already presenting <UIAlertController: 0x7fe61203ac00>

Si quelqu’un a une idée du pourquoi du comment je suis preneur. Que je sache si j’ai fait une erreur ?

Et vous pouvez me taper sur les doigts… Forcement, en faisant quelque chose que l’on ne ma pas appris, je fais des erreurs…

Le projet est disponible sur GitHub:
Le projet : https://github.com/Guerno/AppliTest.git si je n’est pas fait d’erreur :sweat:

Merci d’avance de votre aide.

Au plaisir.
Guerno

Salut.
A première vue tu as un conflit de Constraints.
A mon avis tu as du en doublé une ou alors en avoir 2 qui se contredisent.

Hello,
J’ai le même message depuis des années sur une application et je n’ai jamais réussi à le résoudre correctement. Donc j’ai abandonné étant donné que ça n’empêche en rien l’alert controller d’apparaître.
J’ai passé des jours et des jours à tester plein de choses et rien de concluant donc j’ai laissé tomber.

T’as essayé de faire la même application de test, avec SwiftUI, juste pour voir ?

Je n’ai pas encore commencé avec SwiftUI du coup je ne saurai pas encore faire… c’est pour plus tard.
Mais comme la nuit porte conseille, je crois avoir un début de réponse pour régler le problème que je partagerais pour @schtipoun :wink:

À tout à l’heure…

Curieux de connaître ça alors :slight_smile:

Bonsoir, et bien c’est bon, j’ai résolu le problème (et j’en ai profité pour commencer à apprendre à utiliser Git/GitHub/Xcode ensemble… Ce qui ma value de refaire mon code à 3 reprise :cold_sweat: sans parler de ma touche espace qui ne marche pas très bien … Saleté de clavier papillons… :face_with_symbols_over_mouth: )

Je ne sais pas si c’est la meilleure façon, mais ça a l’aire de tenir la route… Après, il n’y a rien d’ambitieux là-dedans!

Pour faire simple, j’ai simplement ajouté la fonction : override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool dans mon viewController.swift.

Merci à vous de vous être pencher sur mon problème.
@schtipoun je ne pense que cela va t’aider à résoudre ce message que tu as également car tu as certainement déjà dû t’enter de passer par cette méthode…

Bon courage et bonne nuit.

1 J'aime

Effectivement, j’ai déjà cette fonction dans les différentes classes qui posent problème. Mais tant que ça fonctionne pour toi, c’est déjà ça :slight_smile:

Bonsoir,

Je reviens sur ce message que tu as envoyé il y a quelque temps, même si tu as résolu le problème. J’ai déjà rencontré plusieurs fois ce message d’erreur en voulant afficher une fenêtre d’alerte avec la classe UIAlertController.

Pour régler ce problème de conflit de contraintes, je désactive la contrainte de constante -16 appliquée sur la largeur des sous-vues contenues dans la vue du contrôleur d’alerte. Pour ton code, il faut rajouter la ligne de code suivante après la ligne self.present(alertBox, animated: true, completion: nil) :

alertBox.view.subviews.flatMap({$0.constraints}).filter({(one: NSLayoutConstraint) -> (Bool) in
return (one.constant == -16) && (one.secondItem == nil) && (one.firstAttribute == .width)
}).first?.isActive = false

Bonnes fêtes de fin d’année.

Laurent