在 iOS 11 模拟器上运行测试时,视图控制器中的所有 IOutlet 属性均为“nil”

Posted

技术标签:

【中文标题】在 iOS 11 模拟器上运行测试时,视图控制器中的所有 IOutlet 属性均为“nil”【英文标题】:All IOutlet properties are "nil" in a view controller when running test on iOS 11 Simulator 【发布时间】:2017-10-09 15:15:29 【问题描述】:

我在 ios 11 模拟器中遇到了一个问题,在某个单元测试中,swift 视图控制器的所有 IBOutlet 属性都是“nil”,并且在 iOS 10.3 中填充了相同的属性并且测试也通过了.

它具有额外的复杂性,即测试在单独运行时通过,并且在设备上也通过了。它仅在 iOS 11 模拟器上失败,在与所有其他测试一起运行时

【问题讨论】:

MCVE 目前不一定可行。如描述中所述,当测试单独运行时,它通过了。这样一来,整个应用程序的其余部分及其与 UIKit 的交互就成为了 bug 的来源。我需要更多关于如何追踪这一点的想法。 尝试制作 MCVE 是追踪它的一部分。确实,正如您所说,“应用程序的其余部分及其交互”是问题的一部分。但你没有告诉我们这些。你有项目;我们没有。你只需要自己调试。复制你的项目并开始做减法,直到问题消失。当它发生时,就是这样。 【参考方案1】:

没有解释为什么在模拟器 + iOS 11 而不是其他配置上测试失败,但通过使用静态方法创建第二个视图控制器解决了这个问题。出于某种原因,空初始化程序 ("CardViewController()") 以前可以工作,但现在需要像上面一样的完整创建方法。

我对 viewController 的加载方式有点误解(它是在 setup() 方法中加载的),但我也发现这个资源很有用:

https://www.natashatherobot.com/ios-testing-view-controllers-swift/

它并没有解决问题,但它有助于提醒 XCTest 中可能出现的竞争条件。

【讨论】:

以上是关于在 iOS 11 模拟器上运行测试时,视图控制器中的所有 IOutlet 属性均为“nil”的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上运行 detox 测试时模拟器无法打开

XCode 6项目在ios 7.1上segue后崩溃

应用程序卡在带有 Xcode 11 测试版的 iOS 13 测试版模拟器上,但在带有 Xcode 10 的 iOS 13 测试版模拟器上运行良好

ios- 在 ios 6.1 中使用 aviary 自己的视图控制器过度调整大小的问题

键盘卡在 ios 13 模拟器中

iOS - 关闭视图控制器后标签栏变为透明