Dispatchqueue 后台线程更新不适用于 iOS 12

Dispatchqueue background thread update not working on iOS 12

我有以下代码在 11.4.1 上完美运行但在 12

上运行失败
let background = DispatchQueue(label:"task")
var debugMeshNode = SCNNode()
let myKit = MyKit()

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    self.background.async {
        let node = self.myKit.extractNode(anchor:anchor)
        self.debugMeshNode.addChildNode(node) // no node added on UI in iOS12
    }
}

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    self.background.async {
        self.myKit.process(frame: frame)
    }
}

谁能指出我的错误?

更新

如果我像这样在块中添加打印语句,代码似乎可以工作,

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    self.background.async {
        let node = self.myKit.extractNode(anchor:anchor)
        self.debugMeshNode.addChildNode(node) // no node added on UI in iOS12
        print("sample")
    }
}

最初来自 here,我使用了这个

func guaranteeMainThreadSynchronousExecution(_ block: () -> ()) {
    if Thread.isMainThread {
        block()
    } else {
        DispatchQueue.main.sync {
            block()
        }
    }
}

并像这样更新了我的代码,

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    self.guaranteeMainThreadSynchronousExecution {
        self.background.async {
            let node = self.myKit.extractNode(anchor:anchor)
            self.debugMeshNode.addChildNode(node) // no node added on UI in iOS12
        }
    }
}

然后就可以完美运行了。希望这对某人有所帮助。