如何使用 lldb 以编程方式显示Swift ViewController?下面的命令可以工作,但是我要显示的VC卡在 appearing 状态,却从未进入 appeared 状态?
第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的外观不太好。在过渡期间,它被卡在屏幕的一半。使用Chisel的pvc
命令,可以打印“视图层次”中的内容。那显示了我的问题:
(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>