UIApplication.sharedApplication().keyWindow在框架测试中是零

Dem*_*tou 6 frameworks xctest

我正在尝试测试(使用XCTest框架)驻留在框架内的视图控制器(动态库).我遇到了属性UIApplication.sharedApplication().keyWindow的问题,它是nil.我有以下代码:

override func setUp() {
  super.setUp()

  let storyboard = UIStoryboard(name: STORYBOARD_NAME_REPORT,
                                bundle: BundleUtil.getCurrentBundle())
  let chatViewController = storyboard.instantiateViewControllerWithIdentifier(VIEW_CONTROLLER_ID_TIP_CHAT) as UIViewController

  let navigationController = UINavigationController()
  let viewControllers = [chatViewController]
  navigationController.viewControllers = viewControllers

  // PROBLEM: The following causes a crash because keyWindow is nil.
  UIApplication.sharedApplication().keyWindow!.rootViewController = chatViewController

  // Force the view controller to be loaded.
  // Source: https://www.natashatherobot.com/ios-testing-view-controllers-swift/
  let _ = navigationController.view
  let _ = chatViewController.view
}
Run Code Online (Sandbox Code Playgroud)

有关如何正确初始化keywindow属性的任何想法?

小智 0

您可以尝试如下设置:

首先获取共享窗口并将视图控制器指定为根控制器

var window = UIApplication.shared.delegate?.window!
window.rootViewController = viewController
Run Code Online (Sandbox Code Playgroud)

然后使窗口成为关键且可见。

window.makeKeyAndVisible()
CATransaction.flush() //optional
Run Code Online (Sandbox Code Playgroud)