【问题标题】:UIApplication.sharedApplication().keyWindow is nil inside test of frameworkUIApplication.sharedApplication().keyWindow 在框架测试中为零
【发布时间】:2016-10-07 17:25:41
【问题描述】:

我正在尝试测试(使用 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
}

任何想法如何使 keywindow 属性正确初始化?

【问题讨论】:

  • 你找到答案了吗?
  • 2018 仍然需要这个答案

标签: frameworks xctest


【解决方案1】:

您可以尝试如下设置吗:

先获取共享窗口,并将视图控制器分配为根控制器

var window = UIApplication.shared.delegate?.window!
window.rootViewController = viewController

然后使窗口键可见。

window.makeKeyAndVisible()
CATransaction.flush() //optional

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2016-02-05
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多