作者:成都迅捷代驾 | 来源:互联网 | 2023-09-09 12:43
我正在调查在何处制作/显示错误配置的警报控制器
由于未捕获的异常“ 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.
正确的(工作)方式是什么?
除非您做的完全错误,否则所有警报控制器都是通过调用创建的
+[UIAlertController alertControllerWithTitle:message:preferredStyle:]
但是,实际上并不需要此断点,并且它不会帮助您,因为除非您召唤引起问题的特定警报,否则您不会遇到该断点。相反,只需在全局代码中搜索.actionSheet
并修复未配置为弹出窗口的代码即可。
规则是,在iPad上,必须为所有操作表明确指定源视图或源栏按钮项,以使箭头指向;当您进入未为此执行的操作表时,将会立即显而易见。
,
要提供更通用的答案,您可以针对任何课程:
br s -r '-\[UISomeClass init'
br s -r '\+\[UISomeClass '
第一个方法在以init
开头的任何方法上创建一个断点。第二个匹配所有类方法,并为每个方法创建断点。
在一种情况下,两种方法都无法覆盖:超类方法。也许不必担心UIAlertController
,但是通常只能在类实现的方法上设置断点,而不能在继承的方法上设置断点。