【问题标题】:Breakpoint for "Warning: Attempt to present * on * which is already presenting *"“警告:尝试在已经呈现 * 的 * 上呈现 *”的断点
【发布时间】:2017-01-07 20:02:35
【问题描述】:

有时会发生 - 从代码中的不同位置 - 我们想做UIViewController.presentViewController(a, b, c),有时碰巧我们已经在展示,在这种情况下我们会得到:

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

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

【问题讨论】:

    标签: ios objective-c swift uiviewcontroller breakpoints


    【解决方案1】:

    首先,您需要将符号断点设置为-[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 (仍然)将其公共方法导出为 Objective-C 符号。

    【讨论】:

    • 对!我已经在考虑我不想在任何我调用presentViewController的代码中检查presentViewController,并监督我可以使用if-check作为断点的条件。惊人的!只需要验证它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多