【问题标题】:Crash when instantiating ARSCNView for the second time第二次实例化 ARSCNView 时崩溃
【发布时间】:2021-05-06 21:53:00
【问题描述】:

我的 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。

【问题讨论】:

    标签: ios arkit arscnview scnview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-20
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 2020-11-29
      • 2013-09-16
      相关资源
      最近更新 更多