"Warning: Attempt to present * on * which is already presenting *" 的断点

Breakpoint for "Warning: Attempt to present * on * which is already presenting *"

有时我们想从代码的不同地方做 UIViewController.presentViewController(a, b, c),有时我们已经在演示了,在这种情况下我们得到:

Warning: Attempt to present * on * which is already presenting *

是否可以打破这个警告?如何为此设置断点?

首先,您需要将符号断点设置为-[UIViewController presentViewController:animated:completion:]。您可以通过 Xcode 的 Add Symbolic Breakpoint 功能轻松添加。

其次,您需要设置一个条件,以便仅当视图控制器已经呈现某些内容时才命中断点。从程序上讲,这意味着 presentedViewController 属性 是非零的。这里的技巧是访问传递给任何方法调用的 self 隐式参数,这可以通过使用 $arg1 来完成(有关 here 的更多详细信息)。一旦你有了这个,剩下的就很简单了。

断点应如下所示:


(来源:cristik-test.info

总结:

符号:-[UIViewController presentViewController:animated:completion:]
条件:[(UIViewController *)$arg1 presentedViewController] != nil

这适用于 Objective-C 和 Swift 项目,因为 UIViewController(仍然)将其 public 方法导出为 Objective-C 符号。