0

我从我那里调用了一些代码,这些代码viewWillAppear依赖于根视图控制器的 traitCollection 是否有效。令我惊讶的是,即使在 viewWillAppear 被调用时,UIApplication.sharedApplication.keyWindow.rootViewController它仍然是 nil,在它被设置makeKeyWindow并被调用很久之后。为什么会这样?究竟发生了什么?似乎一些合理的假设不再是正确的。

4

2 回答 2

2

启示是,不仅 keyWindow 已被弃用,而且实际上在分配 window 并调用 viewWillAppear 之后,它实际上不起作用并返回 nil。

因此,改为:

    UIViewController *vc = UIApplication.sharedApplication.windows.firstObject.rootViewController;
于 2019-10-02T17:54:41.430 回答
0

我假设您没有在方法上分配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 })
于 2019-10-02T17:12:56.157 回答