Приложение вылетает после удаления узлов просмотра сцены - PullRequest
0 голосов
/ 04 января 2019

Я добавил кнопку в SceneView для удаления размещенных изображений на стене:

@IBAction func reset(_ sender: Any) {
sceneView.scene.rootNode.enumerateChildNodes { (node, _) in node.removeFromParentNode()
    }
}

Работает нормально, но через несколько секунд приложение упало со следующим предупреждением:

com.apple.scenekit.scnview-renderer (14): Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

В этой части моего кода появляется ошибка:

    func update(anchor: ARPlaneAnchor) {

    planeGeometry.width = CGFloat(anchor.extent.x);

    planeGeometry.height = CGFloat(anchor.extent.z);

    position = SCNVector3Make(anchor.center.x, 0, anchor.center.z);



    let planeNode = self.childNodes.first!

    planeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: self.planeGeometry, options: nil))

}

Что я сделал не так?

1 Ответ

0 голосов
/ 04 января 2019

Здесь let planeNode = self.childNodes.first! вы принудительно распаковываете значение. После удаления всех узлов из массива childNodes он станет пустым. Используйте if let

if let planeNode = self.childNodes.first{
 planeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: self.planeGeometry, options: nil))
}
...