【问题标题】:SceneKit – Fatal Error: unexpectedly found nil while unwrapping an Optional value when getting child nodeSceneKit - 致命错误:在获取子节点时展开可选值时意外发现 nil
【发布时间】:2015-04-20 06:20:52
【问题描述】:

所以我试图在我的 SceneKit/Swift 项目中使用 3D 对象(.dae 1.4,使用 Cinema4D r13 导出)。我留下了提供的代码并进行了更改:

let scene = SCNScene(named: "art.scnassets/ship.dae")!

适合我的:

let scene = SCNScene(named: "art.scnassets/pyramid.dae")!

我也确实将文件导入到它应该在的项目中(在 art.scnassets 中)。我可以像默认船一样预览文件,所以应该是正确的。

我也变了:

let ship = scene.rootNode.childNodeWithName("ship", recursively: true)!

再次适合我的:

let pyramide = scene.rootNode.childNodeWithName("pyramid", recursively: true)!

当我现在运行该项目时,它会崩溃并在我修改的第二行中给出以下错误。

fatal error: unexpectedly found nil while unwrapping an Optional value

我已经在其他一些帖子中看到了这个错误,但它实际上并不适合我的情况,也没有帮助我。

有人知道如何解决这个问题吗?

注意

我创建了同一个项目,但使用的是 Obj-C 而不是 Swift,它没有抱怨,只是向我展示了这个:(是的,我确保它的坐标是 0,0,0,不,它不是颜色)

【问题讨论】:

    标签: swift 3d fatal-error scenekit


    【解决方案1】:

    您的 DAE 文件中可能没有名为 pyramid 的节点,因此 childNodeWithName 返回 nil,并且由于您强制解开该返回值,您会崩溃。

    您可以在 Xcode 中查看该文件并检查那里的节点名称,以确保您的名称正确。

    此外,当您发现意外的 nil 时,您可能会考虑重组代码以报告有意义的错误:

    if let pyramid = scene.rootNode.childNodeWithName(...) {
        ...
    } else {
        fatalError("missing pyramid mode in scene file")
    }
    

    【讨论】:

    • 问题实际上是在 pyramid.dae 场景中缺少 childNode。谢谢:)
    • 你是如何给 .dae 文件中的节点命名的?我创建了一个搅拌机模型并将其导出,但遇到了和你一样的问题。感谢您的帮助。
    猜你喜欢
    • 2016-01-26
    • 1970-01-01
    • 2016-02-29
    • 2020-09-19
    • 2016-01-08
    相关资源
    最近更新 更多