我正在调查在哪里制作/呈现了一个错误配置的警报控制器
由于未捕获的异常"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上,所有动作表都必须明确指定源代码视图或源代码栏按钮项,以便箭头指向;当你看到一份你没有这么做的行动单时,这将是显而易见的。