【问题标题】:iOS: After app launched, UIApplication.sharedApplication.keyWindow.rootViewController==niliOS:应用启动后,UIApplication.sharedApplication.keyWindow.rootViewController==nil
【发布时间】:2020-01-31 23:38:57
【问题描述】:

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

【问题讨论】:

    标签: ios uiviewcontroller appdelegate uitraitcollection


    【解决方案1】:

    揭示的是,不仅 keyWindow 已被弃用,而且实际上在分配 window 并调用 viewWillAppear 之后,它还没有功能并返回 nil。

    因此,改为:

        UIViewController *vc = UIApplication.sharedApplication.windows.firstObject.rootViewController;
    

    【讨论】:

      【解决方案2】:

      我假设您没有在 didFinishLaunchingWithOptions 方法上分配 window 属性

      如果您在 App Delegate 分配中没有窗口属性,它将被保留

      你写过类似的代码吗?

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

      顺便说一句,keyWindow属性is now deprecated

      试试这个:

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

      【讨论】:

      • 但我确实分配了它。然而,问题是 keyWindow 不仅被弃用而且不工作。我切换到使用 UIApplication.sharedApplication.windows.firstObject.rootViewController 并且它工作正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多