我正在调查/提出错误配置错误的警报控制器的位置
由于未捕获的异常'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
无关,但是通常只能在类实现的方法上设置断点,而不是在继承的方法上设置断点。