第二次实例化 ARSCNView 时崩溃

Crash when instantiating ARSCNView for the second time

我的 iPhone 应用在销毁 ARSCNView 后再次尝试实例化时遇到问题。

在我的 ViewController 中,我以编程方式创建了一个用于动作捕捉交互的 ARSCNView:

func addARSceneView() {
    arSceneView = ARSCNView(frame: self.view.frame)
    arSceneView.loops = true
    arSceneView.session.delegate = self
    self.view.addSubview(arSceneView)
    arSceneView.session.run(ARBodyTrackingConfiguration())
}

当用户离开应用程序的这一部分时,我将其拆解为:

func removeARSceneView() {
    arSceneView.session.pause()
    arSceneView.pause(self)
    arSceneView.session.delegate = nil
    arSceneView.removeFromSuperview()
    arSceneView = nil
}

稍后,当我尝试使用上面的第一个函数第二次实例化 ARSCNView 时,它在构造函数中崩溃并显示 EXC_BAD_ACCESS:

我还尝试使用 xib 中包含 ARSCNView 的视图,但同样的问题发生在该视图的 init(coder) 函数中。

我在这个问题上一无所获,我想通常开发人员只创建一次 ARSCNView。

TLDR:在您的方案中打开“金属 API 验证”。

我找到了罪魁祸首,在创建了一个只有 ARSCNView 的示例项目后,它没有出现这个问题。我首先从我的原始项目中剥离所有内容,直到它像示例一样准系统。那并没有解决它,所以我比较了两者的每一个小设置,并且看到:在原始项目的“运行”方案中,在“诊断”下,我有“金属 - API 验证" 勾选 关闭。我不记得我是什么时候这么做的,为什么这么做;我认为这是一次提高性能的尝试。但是,启用此复选框完全解决了问题。