【问题标题】:aStoryboard.instantiateViewControllerWithIdentifier("myid") returns nil but not nil in lldbaStoryboard.instantiateViewControllerWithIdentifier("myid") 在 lldb 中返回 nil 但不返回 nil
【发布时间】:2016-12-21 21:59:37
【问题描述】:

这是迄今为止发生在我身上的最奇怪的事情。所以我在单元测试中有下面的代码......

let aStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil)
let viewController = aStoryboard.instantiateViewControllerWithIdentifier("myViewController") as? CustomViewController

上面的代码被执行并且 viewController 为 nil,这可能会发生(这不应该是因为标识符都存在并且文件链接到测试目标)但是可以。

这是疯狂的部分,当我添加断点时,跨过上面的行,然后在 lldb 中键入以下内容

viewController = aStoryboard.instantiateViewControllerWithIdentifier("myViewController") as? CustomViewController

viewController 被分配了内存。怎么样?如果我在 lldb 中手动添加它,那么它有内存,如果我没有,那么它没有内存,单元测试为零。

谁来帮帮我!

【问题讨论】:

  • 您是否已将 CustomController 添加为 UnitTest 目标的一部分?
  • 是的,它被添加到故事板中

标签: ios swift unit-testing lldb


【解决方案1】:

“viewController 分配了内存。怎么办?如果我在 lldb 中手动添加它,那么它有内存,如果我没有,那么它没有内存,单元测试为零。”

在 Swift 中,nil 并不意味着与 Objective-C 相同。它不是指向 NULL 的指针。这只是意味着缺乏适当的价值。更多信息在这里:null / nil in swift language

所以回答你的问题:为 nil 变量提供内存很好。

【讨论】:

  • 问题不在于它是 nil,对象可以是 nil 没关系。如果我在没有断点的情况下运行上面的代码 viewController 为零,那很好。但是如果我没有做任何代码更改,添加一个断点。当程序执行上面的代码时,这一次 viewController 现在已经获得了内存和一个值,这就是奇怪的行为。我没有进行代码更改,我只是添加了一个断点并附加了调试器。为什么附加调试器时viewController有值?
  • 能否发一张这个案例的截图?它可以帮助我们澄清问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2019-06-20
  • 2017-12-16
  • 2014-09-27
  • 2017-06-11
相关资源
最近更新 更多