在Swift和Objective-C之间切换时,使用lldb创建和呈现ViewController

时间:2018-07-01 06:31:59

标签: objective-c swift debugging lldb

如何使用 lldb 以编程方式显示Swift ViewController?下面的命令可以工作,但是我要显示的VC卡在 appearing 状态,却从未进入 appeared 状态?

enter image description here

第0步

编写Swift ViewController ...

class ydHiddenVC: UIViewController {
    override func viewDidLoad() {
        print("code executing in viewDidLoad")
    }
}

第1步

在AppDelegate开始处放置一个断点,其中lldb设置为Swift上下文...

(lldb) exp let $a = ydHiddenVC()
(lldb) po $a
<DELETE_PROV_PROFILE_MACHINE.ydHiddenVC: 0x7fa9f5d00ef0>
(lldb) continue

第2步

lldb在应用加载后自动移动到Obj-C上下文。

(lldb) e id $b = (id)0x7fa9f5d00ef0  // cast the Swift VC to something Objective-C can deal with
(lldb) po [[UIWindow keyWindow] rootViewController]
<UINavigationController: 0x7fa9f783e800>
(lldb) e id $rootvc = (id)0x7fa9f783e800
(lldb) po $rootvc
<UINavigationController: 0x7fa9f783e800>
(lldb) expression (void)[$rootvc pushViewController:$b animated:YES]
(lldb) caflush
code executing in viewDidLoad

摘要

当我执行ViewDidLoad代码时,这看起来像成功。但是,ViewController的外观不太好。在过渡期间,它被卡在屏幕的一半。使用Chiselpvc命令,可以打印“视图层次”中的内容。那显示了我的问题:

(lldb) pvc
    <UINavigationController 0x7fa9f783e800>, state: appeared, view: <UILayoutContainerView 0x7fa9f5d10d10>
       | <DELETE_PROV_PROFILE_MACHINE.ydHomeVC 0x7fa9f5f0bc10>, state: disappearing, view: <UIView 0x7fa9f5d0e300>
       | <DELETE_PROV_PROFILE_MACHINE.ydHiddenVC 0x7fa9f5d00ef0>, state: appearing, view: <UIView 0x7fa9f5d14e10>

0 个答案:

没有答案