问题
在使用AutoLayout 或者masonry 布局UI的时候,经常会遇到约束冲突的警告。
例如:图中,我们知道是一个Button的约束冲突了,但是不能很直接的让人知道是哪个Button。
lldb
要是能知道这个Button UIButton:0x12c7f6f30
的title是什么,那么我们不就可以在代码中直接搜索该title,定位到代码中的Button?
(lldb) po 0x12c7f6f30
<UIButton: 0x12c7f6f30; frame = (371 0; 33 39.6667); opaque = NO; layer = <CALayer: 0x12c7f6b30>>
(lldb) po ((UIButton *)0x12c7f6f30)
<UIButton: 0x12c7f6f30; frame = (371 0; 33 39.6667); opaque = NO; layer = <CALayer: 0x12c7f6b30>>
(lldb) po ((UIButton *)0x12c7f6f30).titleLabel.text
nil
(lldb)
为什么是空?
可能是button没有设置title,而仅仅设置了button的image!那么接下来思路就是:能不能找到这张图片是什么图片?
UIImageView 如何定位图片名字或者预览其内容?
调用UIView的recursiveDescription方法,打印一下button的层级关系!
(lldb) po [((UIButton *)0x12c7f6f30) recursiveDescription]
<UIButton: 0x12c7f6f30; frame = (371 0; 33 39.6667); opaque = NO; layer = <CALayer: 0x12c7f6b30>>
| <UIImageView: 0x12d9087b0; frame = (9.33333 12.6667; 14 14); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12c7f6cd0>>
| <UIButtonLabel: 0x12c6e6340; frame = (0 0; 0 0); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x12d85faf0>>
查看了一下UIImageView的头文件实在无法找到获取UIImageView图片名字的属性或者方法,怎么办?
LLDB技巧:chisel
上网搜索了一下,在lldb中通过chisel能够预览到image的图片内容!
(lldb) po 0x12d9087b0
<UIImageView: 0x12d9087b0; frame = (9.33333 12.6667; 14 14); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12c7f6cd0>>
(lldb) visualize 0x12d9087b0
2016-07-15 18:21:18.240 BMBlueMoonAngel[674:220643] XPC connection interrupted