J'apprécie que Xcode attrape le Mon application est relativement grande (environ 20 écrans), certains sont de grandes UIViewControlers avec plusieurs contrôleurs de vue enfant en eux. Certains sont des valeurs utilitaires avec des cellules personnalisées et des utilisateurs uicollectionnelles avec des cellules personnalisées. Je vais avoir un enfer de temps en train de passer la cause de cette erreur (qui arrive sur la rotation du paysage) p> Voici les informations de ma console: p> Comme vous pouvez le constater, il y a des adresses de mémoire répertoriées. Coller ceux-ci dans la barre de recherche de la fenêtre de surveillance ne révèle pas grand chose. Siplant également les piles d'appel de fil et de file d'attente, je n'ai que le code désassemblé sur ce point d'arrêt (point d'arrêt d'exception). p> p> NslayoutConstraints CODE> et vous donne des informations à ce sujet, mais je ne sais pas comment prendre les adresses de mémoire des contrôles / contraintes et de la carte des contrôles réels. cela a un problème.
3 Réponses :
Vous pouvez essayer d'utiliser visualizeconstraints: code>, comme mentionné ici , et voyez si vous pouvez trouver les mauvaises contraintes de cette façon. P>
OMS! Pour une raison quelconque, je pensais que Uilayoutconstraint était une chose, et donc je pensais que c'était sur le Mac. Je suppose que je n'ai pas lu la question avec précaution!
La réponse courte n'est pas vraiment, OS X a une propriété d'identifiant pouvant être définie sur une vue utilisée par NslayoutConstraint pour aider à identifier les vues mais qui n'existe pas encore sur iOS.
Cependant, il y a un ' Travaillez pour mettre en œuvre quelque chose de similaire sur iOS, mais ce n'est pas joli. Vous devez d'abord établir un nom pour chaque vue, cela a accompli dans la catégorie UIView. Ensuite, vous devez mettre à jour la sortie de NslayoutConstruction Description pour utiliser les nouvelles balises. P>
"V:|-(202)-[UIView:0x75606f0], First View: 0x75606f0: Blue View, Second View: 0x7560bd0: (null)", "V:[UIView:0x75606f0]-(72)-|, First View: 0x7560bd0: (null), Second View: 0x75606f0: Blue View", "V:[UIView:0x7560bd0(548)], First View: 0x7560bd0: (null), "
Technique intéressante. Cela pourrait vraiment être utile si vous le savez à partir du début et faites cela partie de votre routine de mise en œuvre standard. Je soupçonne quelques contrôles, je vais donc appliquer cette technologie et voir ce qui se passe.
C'est une approche intéressante en effet. Un ajout utile consiste simplement à utiliser la propriété Accessoidlabel code> sur code> uIView code> plutôt que de créer une nouvelle propriété. Vous devriez remplir la propriété
accessieuxLabel code> de toute façon. :)
Cette méthode est également expliquée dans objc.io/issue-3/ avancé-auto-licence-toolbox.html , à la section de débogage
J'ai trouvé une sorte de solution grâce à ces sites Web: Problèmes de débogage de iOS autolayout et danse avec le débogueur . Grâce à la console Xcode, vous pouvez identifier à partir de quelle vue le problème provient. p>
la solution: p>
Étape 1: P>
uiviewalertforunsAssociableconstraints code> li>
ul> li>
-
Étape 2: Exécutez votre projet. Lorsque la console imprime tentera de récupérer en rupture de contrainte code>, copiez l'adresse de la mémoire de la vue ( 0x7fc82aba1210 code> ici). P> LI>
-
Étape 3: Changez l'arrière-plan de cette vue pour savoir lequel il est avec cette commande dans la console: e (vide) [0x7fc82d3e18a0 setbackcolor: [uicolor redcolor]] code> p> li>
-
Étape 4: Continuez le programme et consultez l'interface utilisateur mise à jour. La vue avec la couleur de fond rouge est la vue en question. P> li>
-
Étape 5: Retournez à votre IB et trouvez quelle contrainte est le problème sur cette vue. P> li>
ul>