iOS: после запуска приложения UIApplication.sharedApplication.keyWindow.rootViewController == nil - PullRequest
0 голосов
/ 02 октября 2019

У меня есть некоторый код, вызванный из моего viewWillAppear, который полагается на действительность traitCollection контроллера корневого представления. К моему удивлению, даже к тому моменту, когда вызывается viewWillAppear, UIApplication.sharedApplication.keyWindow.rootViewController все еще равен нулю, долгое время после того, как он был установлен и был вызван makeKeyWindow. С чего бы это? Что на самом деле происходит? Кажется, что некоторые разумные предположения перестали быть правдой.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Суть в том, что keyWindow не только устарела, но фактически не функционирует и возвращает nil после того, как окно было назначено и вызвано viewWillAppear.

Следовательно, измените на это:

    UIViewController *vc = UIApplication.sharedApplication.windows.firstObject.rootViewController;
0 голосов
/ 02 октября 2019

Я предполагаю, что вы не присвоили window свойство для didFinishLaunchingWithOptions метода

Если у вас нет свойства окна в назначении App Delegate, оно будет сохранено

у вас есть похожий код?

        self.window = UIWindow(frame: UIScreen.main.bounds)
        let mainVC = UIViewController()
        self.window?.rootViewController = mainVC
        self.window?.makeKeyAndVisible()

Кстати, keyWindow свойство теперь устарело

Попробуйте это:

UIApplication.shared.windows.first({ $0.isKeyWindow })
...