在调试模式下查找界面生成器中的按钮调用的操作

Posted

技术标签:

【中文标题】在调试模式下查找界面生成器中的按钮调用的操作【英文标题】:Find what Action is called by a Button in interface builder in debug mode 【发布时间】:2018-04-26 09:45:55 【问题描述】:

我正在调试一个不是我创建且没有文档的大型项目。 我正在使用 Debug View Hierarchy 来停止对需要修改的视图的执行,只需要找出哪个视图控制器负责该视图以及接口调用了哪些操作。

我该怎么做?

视图层次结构仅显示通用类,而不显示项目中的特定类。 例如,我可以打印按钮的描述,但这只会给我内存地址和框架。另外,打印 superview 只会给我另一个内存地址和框架。

提前谢谢你!

【问题讨论】:

【参考方案1】:

我一直在尝试控制台和其他一些帖子,并找到了解决方案:

首先,通过右键单击它来打印按钮描述(应该适用于任何视图)

    <UIButton: 0x7feefe5e20c0; frame = (17 266.5; 105 30); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x608000236520>>

其次,使用控制台“0x7feefe5e20c0”中的按钮地址打印按钮的所有目标

po [0x7feefe5e20c0 allTargets]
<ViewControllerClass: 0x7feefe5de7b0>

现在“ViewControllerClass”已经更接近我的需要了,它是拥有包含我的按钮的视图的视图控制器

第三次打印按钮的所有控制事件

(lldb) po [0x7feefe5e20c0 allControlEvents]
0x0000000000000040

最后为控制事件的目标打印按钮操作

(lldb) po [0x7feefe5e20c0 actionsForTarget:0x7feefe5de7b0 forControlEvent:0x0000000000000040]
<__NSArrayM 0x7fef00078040>(
    actionCalledByBytton:
)

这给了我“actionCalledByBytton”由“ViewControllerClass”上的按钮调用的操作

多多!希望这对某人有所帮助。

【讨论】:

【参考方案2】:

右键单击界面生成器中的按钮。这些操作应列在Send Events 下。

还可以使用addTarget:action:forControlEvents: 以编程方式添加操作

【讨论】:

Xcode 处于调试视图层次模式,而不是编辑模式,右键单击只允许我打印视图描述和更多视图选项。 你不能用Continue program execution按钮退出调试层次模式吗?底部面板左数第三个。【参考方案3】:

如果您的按钮中有文本,您可以在 Find Navigator 中搜索按钮的文本并进行一些预测,如果您在按钮上有图像,您可以在 assets 中找到图像名称。通过这两个您可以最小化搜索。 如果您发现任何包含静态文本的标签,请搜索该文本!也许这对你有帮助!

【讨论】:

以上是关于在调试模式下查找界面生成器中的按钮调用的操作的主要内容,如果未能解决你的问题,请参考以下文章

应用程序仅在调试模式下崩溃

发布与调试模式下本地堆栈变量的代码生成

利用浏览器调试APP中的H5页面

Android studio中的调试(Debug)按钮具体用法

从第三方 DLL 调用 Qt 中的函数在调试模式下工作,在发布时崩溃

为啥 Qt 用户界面在发布模式和调试模式下看起来不同