создать и представить ViewController с помощью lldb при переключении между Swift и Objective-C - PullRequest
0 голосов
/ 01 июля 2018

Как программно представить Swift ViewController с lldb ? Следующие команды работают, но VC, который я хочу показать, застрял в состоянии кажущийся и никогда не попадает в состояние кажущийся ?

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 не выглядел красиво. Он застрял на полпути через экран во время перехода. С помощью команды 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>
...