Сбой приложения при перезапуске сеанса ARSCNView - PullRequest
0 голосов
/ 22 января 2020

Написал простое приложение AR, но оно останавливается, когда я приостанавливаю и перезапускаю сеанс.

В раскадровке только 2 кнопки и ARSCNView.

Кнопка «Добавить» предназначена для добавление поля в сцену.

И кнопка «сброс» предназначена для перезапуска сеанса ARSCNView.

Ниже приведен код.

import UIKit
import ARKit

class ViewController: UIViewController {

    @IBOutlet weak var sceneView: ARSCNView!
    let configuration = ARWorldTrackingConfiguration()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints, ARSCNDebugOptions.showWorldOrigin]
        self.sceneView.session.run(configuration)
    }

    @IBAction func add(_ sender: Any) {
        let node = SCNNode()
        node.geometry = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
        node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
        node.position = SCNVector3(0, 0, -0.3)

        self.sceneView.scene.rootNode.addChildNode(node)
    }

    @IBAction func reset(_ sender: Any) {
        self.restartSession()
    }

    func restartSession() {
        self.sceneView.session.pause()
        self.sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
            node.removeFromParentNode()
        }
        self.sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
    }

}

Работает нормально, когда я нажмите кнопку «Добавить».

Хотя он генерирует одни и те же блоки в одной и той же позиции.

Проблема в функции «сброса».

Журналы ошибок похожи :

World Tracking[826:126965] Metal GPU Frame Capture Enabled
World Tracking[826:126965] Metal API Validation Enabled
World Tracking[826:127217] [Technique] World tracking performance is being affected by resource constraints [3]
World Tracking[826:127217] [Technique] VIO error callback: 24034.921741, 3, Frame time stamps are either out of order or repeating

И Xcode показывает Thread 1: EXC_BAD_ACCESS (code=1, address=0x50) в AppDelegate.swift:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {  // Thread 1: EXC_BAD_ACCESS (code=1, address=0x50)

...

«World Tracking» - это название проекта.

Любые советы или комментарии будут оценены.

Заранее спасибо.

...