如何在UIAlertController的init或当前状态中设置lldb断点

问题描述 投票:0回答:2

我正在调查/提出错误配置错误的警报控制器的位置

由于未捕获的异常'NSGenericException'而终止应用程序,原因:“您的应用程序提供了一个UIAlertController()的样式UP.BVTabBarViewController的UIAlertControllerStyleActionSheet()。 modalPresentationStyle具有此样式的UIAlertController的一个是UIModalPresentationPopover。您必须通过以下方式为此弹出窗口提供位置信息警报控制器的popoverPresentationController。您必须提供sourceView和sourceRect或barButtonItem。如果这当您显示警报控制器时,信息未知,您可以在UIPopoverPresentationControllerDelegate方法中提供它-prepareForPopoverPresentation。

天真的,我已经尝试过了:

(lldb)  br s -n "-[UIAlertController init]"
Breakpoint 100: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

正确的(工作)方式是什么?

xcode lldb
2个回答
1
投票

除非您完全做错了,否则所有警报控制器都是通过调用创建的

+[UIAlertController alertControllerWithTitle:message:preferredStyle:]

但是,实际上并不需要此断点,它不会帮助您,因为除非您召唤引起问题的特定警报,否则您不会遇到该断点。相反,只需在代码中全局搜索.actionSheet,然后修复未配置为弹出窗口的代码即可。

规则是,在iPad上,必须为所有操作表明确指定源视图或源栏按钮项,以使箭头指向;当您进入未为此执行的操作表时,将立即显而易见。


0
投票

为了提供更通用的答案,对于任何类您都可以这样做:

br s -r '-\[UISomeClass init'
br s -r '\+\[UISomeClass '

第一个在以init开头的任何方法上创建一个断点。第二个匹配所有类方法,并为每个方法创建断点。

在一种情况下,这两种方法都没有涉及:超类方法。也许与UIAlertController无关,但是通常只能在类实现的方法上设置断点,而不是在继承的方法上设置断点。

© www.soinside.com 2019 - 2024. All rights reserved.