1

在销毁 ARSCNView 后尝试再次实例化 ARSCNView 时,我的 iPhone 应用程序出现问题。

在我的 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:

在此处输入图像描述

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

我没有发现这个问题,我猜通常开发人员只创建一次 ARSCNView。

4

1 回答 1

1

TLDR:在您的方案中打开“Metal API 验证”。运行方案,

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

于 2021-02-03T15:37:11.560 回答