调试UIViewAlertForUnsatisfiableConstraints
作为iOS平台上的应用程序开发人员,我经常遇到如下约束警告,
无法同时满足约束条件。 以下列表中至少有一个约束是您不想要的约束。 尝试以下操作: (1)查看每个约束,并尝试找出不期望的约束; (2)查找添加了一个或多个不必要约束的代码并进行修复。 ( “” “, ” “, ” “, ” <“,” “ ”, “ “, ” “ ) 将尝试通过以下方式恢复 打破约束
在UIViewAlertForUnsatisfiableConstraints上创建一个符号断点,以在调试器中捕获该断点。
当我看到此类问题时,我们立即使用UIViewAlertForUnsatisfiableConstraints设置了符号断点。 当我再次运行该应用程序以重现该问题时,Xcode将在上述约束警告处停止。
现在如何处理指针和汇编代码?
经过研究,我找到了一些调试此断点的解决方案。 如果您看到上面的图像,您会看到%rbp,%rsp,%rbx,%r15等字符串。这些属性保存视图和约束的地址,这是约束问题背后的原因。 我们可以在Xcode控制台中打印它们,以查看有关此内容的更多详细信息。
我通常从打印rbx开始,因为根据我的经验,它通常是NSArray ,其中包含该问题涉及的所有视图和约束。
打开Xcode控制台并执行以下命令。
po $ rbx
以上结果看起来与警告消息完全一样,因此,我们可以如何处理它。 三想记住这里,
- 程序执行在断点处停止
- 您具有约束问题所涉及的所有视图的内存地址。
- LLDB使您可以在运行时评估obj-c表达式
如果查看po $ rbx命令的结果,可以看到view的内存地址。 例如UIView:0x7f94ff5b3c70
我通常会为某些视图提供外观并继续执行程序。
使用从上一个打印命令获得的内存地址,在Xcode控制台中执行以下命令。
ex [(UIView *)0x7f94ff5b3890 setBackgroundColor:[UIColor greenColor]] ex [(UIView *)0x7f94ff5b3c70 setBackgroundColor:[UIColor greenColor]]
现在点击继续程序执行按钮以运行该应用程序。 现在,您将在屏幕上看到两个视图,一个为红色,另一个为绿色。
现在,您知道哪些视图可能导致约束问题。 如果所有视图都正常,则以不同的视图重复步骤,直到找到问题为止。
有时,您更改颜色的视图可能会掩埋在其他视图下,因此不会立即在屏幕上可见。 在这种情况下,您可以使用Debug View Hierarchy来更深入地了解您的视图层次结构。
在视图层次结构的快照中,您可以清除所有顶级视图,直到看到“彩色”视图,
希望本文对您有所帮助。 如有任何疑问,请发表评论。
对不起,语法不好