Veo que aparece un error en mi registro de depurador:
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.
¿Cómo atrapo esa llamada? No aparece en ninguna parte de mi código.
ios
autolayout
uikit
constraints
xcode7
Maury Markowitz
fuente
fuente
Respuestas:
¡Esta publicación me ayudó MUCHO !
Añadí UIViewAlertForUnsatisfiableConstraints punto de ruptura simbólica con la acción sugerida:
Proyecto Obj-C
Proyecto Swift
Con esta sugerencia, el registro se hizo más detallado, y fue más fácil para mí identificar qué vista tenía la restricción rota.
Luego detuve la ejecución y cambié el color de fondo de la vista problemática con el comando (reemplazando
0x7f88a8cc2050
con la dirección de memoria de su objeto, por supuesto) ...Obj-C
Swift 3.0
... y el resultado fue increíble!
¡Simplemente asombroso! Espero eso ayude.
fuente
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]
vuelvenil
por míQuerrás agregar un
Symbolic Breakpoint
. Apple proporciona una excelente guía sobre cómo hacer esto.cmd+7
(cmd+8
en Xcode 9)Add
botón en la esquina inferior izquierda.Add Symbolic Breakpoint...
Symbol
simplemente escribaUIViewAlertForUnsatisfiableConstraints
También puede tratarlo como cualquier otro punto de interrupción, activarlo y desactivarlo, agregar acciones o mensajes de registro.
fuente
NSLayoutConstraint
ha tenido unaidentifier
propiedad desde iOS 7 - Xcode 7 y superior , que se puede configurar tanto desde IB Storyboards como desde el código. Al establecer el identificador, puede distinguir más fácilmente entre las restricciones generadas por el sistema y las generadas por el usuario en el registro de depuración, por ejemplomyConstraint.identifier = "centered image"
(fuente y ejemplos: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )Seguí el consejo de Stephen e intenté depurar el código y ¡vaya! funcionó. La respuesta se encuentra en el mensaje de depuración en sí.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
La línea anterior le dice que el tiempo de ejecución funcionó al eliminar esta restricción. Es posible que no necesite Espaciado horizontal en su botón (MPKnockoutButton). Una vez que elimine esta restricción, no se quejará en el tiempo de ejecución y obtendrá el comportamiento deseado.
fuente
Cada vez que intento eliminar las restricciones que el sistema tuvo que romper, mis restricciones ya no son suficientes para satisfacer el IB (es decir, "restricciones faltantes" se muestran en el IB, lo que significa que están incompletas y no se utilizarán). De hecho, resolví esto estableciendo la restricción que quiere romper a baja prioridad, lo que (y esto es una suposición) permite que el sistema rompa la restricción con gracia. Probablemente no sea la mejor solución, pero resolvió mi problema y las restricciones resultantes funcionaron perfectamente.
fuente