MBProgressHUD 出现Main Thread Checker: UI API called on a background thread: -[UIApplication applic...

升级的iOS12系统后,Xcode在调试项目时,如果遇到使用MBProgressHUD的弹框提示,就会出现

[reports] Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]

PID: 850, TID: 218915, Thread name: com.apple.CoreMotion.MotionThread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0

这样的警告。同时,tips在第一次弹出时也会阻塞页面的滑动流畅度,严重影响用户体验。



出现原因:

升级到Xcode10以后,貌似多出了这么个东西,(以前可能也有,没太注意。。)

Main Thread Checker。

MBProgressHUD 出现Main Thread Checker: UI API called on a background thread: -[UIApplication applic..._第1张图片
image01

我们都知道,针对UI的操作必须在主线程执行,如果没有在应该在主线程执行的操作放在了 background thread里去,Xcode一般都会给个蓝色字体的提示,并且在当前页面还会指出具体的问题代码。

但是在使用MBProgressHUD 出现了上述问题,Xcode只是简单的在这个问题给个了警告,并未指出出问题的具体代码。导致我花了很长时间来定位出问题的位置。。。

image02





经历了相当蛋疼的查找,被我老大定位到了原因。就是下面注释的语句导致的。

MBProgressHUD 出现Main Thread Checker: UI API called on a background thread: -[UIApplication applic..._第2张图片
image03

其实这个方法的作用,是给MBProgressHUD 的tips 加一个视差效果,(不得不佩服,MBProgressHUD的作者真的想的很周到,但是具体的效果好像也不是很明显。。。)

MBProgressHUD 出现Main Thread Checker: UI API called on a background thread: -[UIApplication applic..._第3张图片
image04


MBProgressHUD 出现Main Thread Checker: UI API called on a background thread: -[UIApplication applic..._第4张图片



最后的解决办法:

注释掉 这一句就好了。

[bezelView  addMotionEffect:group];

或者勾选掉Main Thread Checker选项

MBProgressHUD的作者也给出了另一种方法:

将这个属性设为NO

hud.defaultMotionEffectsEnabled = NO;




我是直接用了第一种方法,作者给出的方法试了,好像没用,也可能是我使用过的姿势不对。

附上一个链接,感兴趣的去看看吧

Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState] · Issue #552 · jdg/MBProgressHUD · GitHub

你可能感兴趣的:(MBProgressHUD 出现Main Thread Checker: UI API called on a background thread: -[UIApplication applic...)