我正在使用Swift使用Google附近的消息库。我按照示例代码来设置库。我同时使用蓝牙和麦克风来测试功能。我在viewDidDisappear()中取消分配发布/订阅。基本上是两行代码:

publication = nil
subscription = nil


但是,当我关闭视图控制器时,有时整个应用都会崩溃。 stacktrace仅显示崩溃与音频有关。这是堆栈跟踪的一部分:

Crashed: AudioRecorderCallbackQueue
0  libdispatch.dylib              0x18df39f60 _dispatch_barrier_sync_f_slow + 596

1  ProjectLibs                    0x1037ad8e0 std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::vector(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&) + 2808

2  ProjectLibs                    0x1037ad8e0 std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::vector(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&) + 2808

3  ProjectLibs                    0x1037ad0f4 std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::vector(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&) + 780

4  libsystem_blocks.dylib         0x18df7ea28 _Block_release + 144


有谁知道导致崩溃的原因是什么,以及如何解决或防止应用崩溃?

谢谢!

最佳答案

我设置了一个应用,使其表现出您描述的工作方式。通过启用日志记录,我注意到它仍在短时间内发送消息,这很可能是您崩溃的原因。

您可以使用以下命令启用日志记录:

GNSMessageManager.setDebugLoggingEnabled(true)


通过在过程中将它们设置为nil,我可以使它们在视图控制器完全关闭之前停止发送。

以下是在最快的时间(甚至在viewWillDisappear之前)执行的操作:

override func willMove(toParentViewController parent: UIViewController?) {
    super.willMove(toParentViewController: parent)

    if parent == nil {
        publication = nil
        subscription = nil
    }
}

关于ios - Google附近的邮件丢失了:释放后的AudioRecorderCallbackQueue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40899896/

10-08 23:52