Как программно представить Swift ViewController с lldb ? Следующие команды работают, но VC, который я хочу показать, застрял в состоянии кажущийся и никогда не попадает в состояние кажущийся ?
Шаг 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>