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

13
有时候我们在代码的不同位置想要执行 UIViewController.presentViewController(a, b, c),但有时我们已经正在presenting,这时就会出现以下警告:

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

我们是否能够在此警告处打上断点?如何设置断点来进行调试?

1个回答

23

首先,您需要设置一个符号断点,以捕获-[UIViewController presentViewController:animated:completion:]方法。您可以通过Xcode的添加符号断点功能轻松完成此操作。

其次,您需要设置一个条件,使得只有在视图控制器已经呈现了某些内容时才触发断点。从程序角度来讲,这意味着presentedViewController属性不为空。关键在于访问传递给任何方法调用的self隐式参数,这可以通过使用$arg1来实现(更多细节请参见这里)。一旦您拥有了这个,剩下的就很容易了。

以下是断点的设置方式:

Breakpoint
(来源:cristik-test.info)

总之:

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

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


没错!我已经在考虑了,我不想在每次调用presentViewController时都在代码中检查presentedViewController,并且忽略了我可以将那个if-check作为断点的条件。太棒了!只需要验证它是否有效。 - smat88dd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接