美文网首页iOS学习笔记程序员iOS Developer
记一次子线程中更新UI导致crash

记一次子线程中更新UI导致crash

作者: flightlessBirdT | 来源:发表于2017-08-23 15:45 被阅读256次

好久没有写文章了。最近两个多月都在进行大版本迭代。挺烦的。现在工作进入收尾阶段 一直在调试程序。遇到一些有意思的东西会在这里记下来。

今天调试了一个语音创建的bug。当用户第一次启动程序时,会进行麦克风权限判断,当用户点击开启的时候程序就会crash。于是我在手机上卸载了测试版本,重新跑了一遍新程序,崩溃信息如下:

Snip20170823_12.png

谷歌翻译是:
在从主线程访问引擎后,此应用程序正在从后台线程修改autolayout引擎。 这可能导致发动机损坏和奇怪的崩溃。

其实大致意思一眼就看看出来 你在子线程更新UI布局导致了这次崩溃。

然后我加了全局断点

Snip20170823_15.png

果然是定位到了UI布局上。接着我仔细看了这个方法,发现是在一个block块中调用的。

Snip20170823_16.png

那么解决起来就很简单了,因为block是在子线程进行回调的。我们只需要在回调代码块中回到主线程进行UI布局的操作就可以了。

        case AVAudioSessionRecordPermissionUndetermined:{
            NSLog(@"第一次调用,是否允许麦克风弹框");
            [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
                // CALL YOUR METHOD HERE - as this assumes being called only once from user interacting with permission alert!
                dispatch_async(dispatch_get_main_queue(), ^{
                    
                    if (granted) {
                        [self showVoiceInputView:btn];
                    } else {
                        [self showVoiceAuthorityView];
                    }
                    
                });
            }];
            break;
        }

相关文章

  • 记一次子线程中更新UI导致crash

    好久没有写文章了。最近两个多月都在进行大版本迭代。挺烦的。现在工作进入收尾阶段 一直在调试程序。遇到一些有意思的东...

  • APP崩溃提示:This application is modi

    崩溃输出日志 崩溃原因 在子线程中更新UI导致主线程的视图布局出错 解决方法 把更新UI的操作放在主线程中执行 s...

  • 防止crash的一些方法

    UI 非主线程刷新如果UI的刷新没有在主线程发生,导致的后果包括可能会有crash、动画失效、界面无反应或者异常等...

  • 使用Kotlin协程撸一个简易异步调用库

    由于android限制了只能在UI线程更新视图,而在UI线程中做耗时任务又会导致ANR,因此在平时的开发中,需要将...

  • iOS学习笔记(持续更新)

    1.主线程中更新UI 之前在项目中的一个回调方法里面更新了UI导致了一个NSInternalInconsisten...

  • 闪退常见原因汇总

    Fatal signal 6 (SIGABRT) 很可能是在自线程中更新UI操作导致

  • 子线程更新UI的方法

    子线程中不能直接更新UI,如果直接更新的话会发生崩溃所以要在主线程中更新UI,总计三种回到主线程更新UI的方式 1...

  • getView方法不执行

    可能是在子线程更新ui导致,尝试切换到主线程解决。

  • Android更新UI的几种方法

    第一种场景: 在UI线程中更新UI,这种是最简单的,直接更新UI即可。代码如下 第二种场景: 从子线程中更新UI ...

  • 使用异步消息处理更新UI线程

    1. Android的UI时线程不安全的,如果在子线程中更新UI会出现异常,导致程序崩溃。 为了解决如上这些问题,...

网友评论

    本文标题:记一次子线程中更新UI导致crash

    本文链接:https://www.haomeiwen.com/subject/pwnddxtx.html