斯威夫特:线程1:即使有守卫,也仍然是EXC_BAD_ACCESS

时间:2018-10-19 14:47:35

标签: ios iphone swift

我不明白为什么我的应用程序随机崩溃在这里。

if PlayerViewController.canUpdate {
            DispatchQueue.main.sync {


                guard !(self.barView?.isHidden ?? false) else { . //crash_happens_here
                     return;
                }

                do {
                    self.barView?.updateBuffer(pcmBuffer.mBuffers.mData?.assumingMemoryBound(to: CFloat.self), withBufferSize: UInt32(numberFramesOut / 2));

                }
            }
        }

完整的代码在这里。

2 个答案:

答案 0 :(得分:1)

执行保护后,可能不存在'Self'或'barView',请尝试使用 StrongSelf并将barView添加到后卫

if let strongSelf = self, let barView = strongSelf.barView {
    guard !(barView.isHidden ?? false) else { . ....
}

答案 1 :(得分:1)

我会猜测self.barView是可选的,也是weak。尝试将其作为正常的强参考。有时这足以使这种错误消失。