Je vois une erreur apparaître dans mon journal de débogage:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Comment puis-je intercepter cet appel? Il n'apparaît nulle part dans mon code.
ios
autolayout
uikit
constraints
xcode7
Maury Markowitz
la source
la source
Réponses:
Ce message m'a beaucoup aidé !
J'ai ajouté le point d'arrêt symbolique UIViewAlertForUnsatisfiableConstraints avec l'action suggérée:
Projet Obj-C
Projet Swift
Avec cet indice, le journal est devenu plus détaillé, et il m'a été plus facile d'identifier quelle vue avait la contrainte brisée.
Ensuite, j'ai suspendu l'exécution et j'ai changé la couleur d'arrière-plan de la vue problématique avec la commande (en la remplaçant
0x7f88a8cc2050
par l'adresse mémoire de votre objet bien sûr) ...Obj-C
Swift 3.0
... et le résultat C'était génial!
Simplement extraordinaire! J'espère que ça aide.
la source
rror: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x7f88a8cc2050). The process has been returned to the state before expression evaluation.
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace]
revientnil
pour moiVous voudrez ajouter un
Symbolic Breakpoint
. Apple fournit un excellent guide sur la façon de procéder.cmd+7
(cmd+8
dans Xcode 9)Add
bouton en bas à gaucheAdd Symbolic Breakpoint...
Symbol
tapez simplementUIViewAlertForUnsatisfiableConstraints
Vous pouvez également le traiter comme tout autre point d'arrêt, l'activer et le désactiver, ajouter des actions ou consigner des messages.
la source
NSLayoutConstraint
a uneidentifier
propriété depuis iOS 7 - Xcode 7 et supérieur , qui peut être définie à la fois à partir des storyboards IB ainsi qu'à partir du code. En définissant l'identifiant, vous pouvez plus facilement distinguer les contraintes générées par le système et celles générées par l'utilisateur dans le journal de débogage, par exemplemyConstraint.identifier = "centered image"
(source et exemples: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )J'ai suivi les conseils de Stephen et essayé de déboguer le code et whoa! ça a marché. La réponse réside dans le message de débogage lui-même.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
La ligne ci-dessus vous indique que le runtime a fonctionné en supprimant cette contrainte. Il se peut que vous n'ayez pas besoin d'espacement horizontal sur votre bouton (MPKnockoutButton). Une fois que vous avez supprimé cette contrainte, elle ne se plaindra pas lors de l'exécution et vous obtiendrez le comportement souhaité.
la source
Chaque fois que j'essaie de supprimer les contraintes que le système a dû casser, mes contraintes ne sont plus suffisantes pour satisfaire l'IB (c.-à-d. "Les contraintes manquantes" s'affichent dans l'IB, ce qui signifie qu'elles sont incomplètes et ne seront pas utilisées). J'ai réussi à contourner ce problème en définissant la contrainte qu'il veut rompre à une priorité faible, ce qui (et c'est une hypothèse) permet au système de rompre la contrainte avec élégance. Ce n'est probablement pas la meilleure solution, mais cela a résolu mon problème et les contraintes résultantes ont parfaitement fonctionné.
la source