【问题标题】:After migrating to Swift 3, crash on accessing ViewController's view迁移到 Swift 3 后,访问 ViewController 的视图时崩溃
【发布时间】:2017-05-03 22:15:34
【问题描述】:

迁移到 Swift 3 后,应用崩溃了

-[_SwiftValue unsignedIntegerValue]: unrecognized selector sent to instance 0x60800064d5f0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_SwiftValue unsignedIntegerValue]: unrecognized selector sent to instance 0x60800064d5f0'

尝试访问vc.view 时。这里是相关代码sn-p。该代码是从UIViewController 调用的。

guard let vc = storyboard?.instantiateViewController(withIdentifier: "some-viewcontroller-id") else { 
    return 
}

if let vc = vc as? SomeViewController {
    let theView: UIView = vc.view
    theView.translatesAutoresizingMaskIntoConstraints = false
}

如果我在调试窗口中调用let theView: UIView = vc.viewpo vc.view 之前在断点处停止,我会在调试窗口中得到相同的错误。

-[_SwiftValue unsignedIntegerValue]: unrecognized selector sent to instance

但是如果我再次po vc.view 我得到... ...

Optional<UIView>

然后可以继续执行。我正在使用 Xcode 8.1。在 iOS 设备和模拟器上重现。

有什么建议吗?

【问题讨论】:

  • 只是为了确定-您是否尝试过通常的方法-清理、清理构建文件夹、清除派生数据、重置模拟器(这是在模拟器上还是在设备上发生)、重新启动 Xcode?哪个版本的 Xcode?​​span>
  • @Losiowaty。我正在使用 Xcode 8.2。在设备和模拟器上重现。是的,我照常尝试了。

标签: ios uiviewcontroller swift3


【解决方案1】:

我认为这不是由于UIViewController.view。你的错误说它是Unrecognized Selector send to instance allocating at some kind of memory index。如果您的选择器方法之一是私有的,请将 @objc 放在它前面。我可以肯定地说这不是 Nil 值错误。

【讨论】:

    【解决方案2】:

    将视图的storyboard-id设为“some-viewcontroller-id” 它会正常工作

    【讨论】:

      【解决方案3】:

      问题已解决

      长话短说,和UIViewController.view一点关系都没有!它与in this answer 描述的String.Encoding.utf8.rawValue 问题有关。

      由于某种原因,模拟器上的崩溃并没有提供太多信息,除了我已经粘贴到问题中。在设备上,它生成了一份非常详细的报告,帮助我找到了这次崩溃的根本原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 2019-06-10
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多