iOS 11.4上的SceneView Hittest崩溃,在iOS 12+上运行

时间:2018-11-21 10:56:44

标签: ios scenekit arkit hittest

我在iOS 11.4上遇到m_sceneView.hittest(...)函数的崩溃。相同的代码可以在iOS 12+上运行!

代码如下:

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
  guard m_sceneView.session.currentFrame != nil else {return}

  DispatchQueue.main.async(execute: {
    if let camera = self.m_sceneView.session.currentFrame?.camera, 
                    case .normal = camera.trackingState {
      let results = self.m_sceneView.hitTest(self.m_sceneView.center, 
                    options: [SCNHitTestOption.searchMode: 2])
      guard let result = results.first else {
        print("No Hittest results received")
        return
      }

      // do something with the hittest result !
      // ...
      // ...
    }
  })
}

我在最常见的行上遇到“ EXC_BAD_ACCESS(代码= 1,地址= 0x0)”崩溃。

  • 我已检查self.m_sceneView.center包含有效值
  • 我正在检查会话状态(如您在代码中所见)
  • 问题是可重现的。
  • 我正在操作的视图是ARSCNView

任何想法如何解决此问题?

1 个答案:

答案 0 :(得分:1)

我从苹果公司那里得到了解决方案。实际上,这是SceneKit API中的一个错误,该错误已在IOS 12中得到解决,但是对于12之前的版本有一种解决方法:

let options: [SCNHitTestOption: Any] = [SCNHitTestOption.boundingBoxOnly: true]
let hitResults = scnView.hitTest(p, options: options)