使用 expression 命令调试 UI 问题

栏目: IOS · 发布时间: 5年前

内容简介:通过试图调试器可以解决开发中的大部分 UI 问题。但是对于一些隐蔽得比较深的问题,我们就需要用到 lldb 了。那么,怎么在调试 UI 问题的过程中,使用 lldb 呢?下面举一个实际的例子。在项目中,我们经常会发现自己自定义的 view 会出现一些显示上的问题,明明设置了 view 的属性,比如背景色,但在运行时却发现这个设置并不生效,view 的背景色不会显示。

通过试图调试器可以解决开发中的大部分 UI 问题。但是对于一些隐蔽得比较深的问题,我们就需要用到 lldb 了。

那么,怎么在调试 UI 问题的过程中,使用 lldb 呢?下面举一个实际的例子。

在项目中,我们经常会发现自己自定义的 view 会出现一些显示上的问题,明明设置了 view 的属性,比如背景色,但在运行时却发现这个设置并不生效,view 的背景色不会显示。

这时,可以先打开视图调试器,选中这个 view,在视图调试器的 Object Inspector 面板中你会找到 Address 0x114285910 字样,这个就是 view 的内存地址。

在试图调试器打开的情况下,进入 lldb,输入 e 命令( expression ):

(lldb) e 0x114285910
(long) $34 = 4633155856

命令执行后输出了第二句,表示将这个地址存入到了 $34 变量,你可以使用这个变量来访问这个 view 对象了,比如打印它的信息:

(lldb) po $34
<UIView: 0x114285910; frame = (0 0; 26 26); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x11423d480>>

那么,我们能不能直接修改这个对象的属性呢?

(lldb) e [$34 setBackgroundColor:[UIColor redColor]];
error: warning: receiver type 'long' is not 'id' or interface pointer, consider casting it to 'id'
error: no known method '-setBackgroundColor:'; cast the message send to the method's return type

呃,报错了,说明这招并不好使。你可以先将它转成一个 UIView 类型:

(lldb) e (UIView*)$34
(UIView *) $35 = 0x0000000114285910

转换后的对象存入到新的变量 $35。用它来试试:

(lldb) e $35.backgroundColor=[UIColor redColor];
error: property 'backgroundColor' not found on object of type 'UIView *'

看来直接访问 UIView 的属性是不行的。我们知道每个 UIView 底层都是一个 CALayer,那么我们试着访问它底层的 CALayer 呢?

(lldb) e $35.layer.backgroundColor=[UIColor redColor].CGColor;
(CGColorRef) $36 = 0x0000000117b0c430

看样子成功了!点击继续执行按钮,查看 view 的背景色,仍然没有变。

再次点击视图调试器,拖动视图,查看 view 的层次,发现在我们的 view 的背景色实际上已经变成红色了,只不过在它之上却有一个背景不透明 UIView,是它挡住了我们的视图!

用 expression 命令将这个遮挡在上层的 view 修改为透明的,继续执行,发现问题解决了。


以上所述就是小编给大家介绍的《使用 expression 命令调试 UI 问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

汇编语言(第2版)

汇编语言(第2版)

王爽 / 清华大学出版社 / 2008-4 / 33.00元

《汇编语言(第2版)》是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了《汇编语言(第2版)》。《汇编语言(第2版)》具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在......一起来看看 《汇编语言(第2版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具