如何在objc类的init中设置lldb断点



我正在调查在哪里制作/呈现了一个错误配置的警报控制器

由于未捕获的异常"NSGenericException"而终止应用程序,原因:"您的应用程序提供了一个UIAlertController((风格来自UP的UIAlertControllerStyleActionSheet。BVTabBarViewController((。模式展示风格具有这种风格的UIAlertController是UIModalPresentationPopover。您必须通过提醒控制器的popoverPresentationControlroller。您必须提供sourceView和sourceRect或barButtonItem。如果当您出示警报控制器时,信息是未知的,您可以在UIPopoverPresentationControllerDelegate方法中提供-准备PopoverPresentation。

我天真地尝试过这个:

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

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

要提供更通用的答案,对于任何类都可以:

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

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

有一种情况两种方法都没有涵盖:超类方法。也许UIAlertController不关心,但通常只能在类实现的方法上这样设置断点,而不能在继承的方法上设置断点。

除非你做得完全错误,否则你的警报控制器都是通过调用创建的

+[UIAlertController alertControllerWithTitle:message:preferredStyle:]

但是,实际上不需要这个断点,它对您没有帮助,因为除非您调用导致问题的特定警报,否则您不会遇到断点。相反,只需在代码中全局搜索.actionSheet,并修复未配置为popover的代码。

规则是,在iPad上,所有动作表都必须明确指定源代码视图或源代码栏按钮项,以便箭头指向;当你看到一份你没有这么做的行动单时,这将是显而易见的。

相关内容

  • 没有找到相关文章

最新更新