前言
最近发现一个问题,自iOS 10.0以后,项目中老是出现有关定位管理者的日志信息,说定位管理者最好放在主线程;在实际开发中,当在子线程中创建定位管理者,有可能收不到回调信息
提示信息如下:
中文翻译为:一个定位管理者创建在子线程,而不是主线程.在开发中,要确保一个定位管理者所在的线程要在运行循环(Run loop)中.在实际开发中,当在子线程中创建定位管理者,有可能收不到回调信息.
解决过程
我找了好久,尝试了好多方法,都无果: 这是在stackoverflow中搜到的解决方法
作者的问题:
比较好的回答:
但我尝试了,也无果.
没办法,有时间了就去尝试.
解决方法:
最终解决方法是在App Delegate 内关于地图或者导航注册信息那一块.
这是我导航注册代码:
//开启导航服务 [BNCoreServices_Instance initServices:@"xxxxxxxxxxxx"]; [BNCoreServices_Instance startServicesAsyn:^{ NSLog(@"导航开启成功"); } fail:^{ NSLog(@"导航开启失败"); }];我在开启导航服务的时候,使用了异步开启,然后主线程回调开启的结果.
进入百度导航API发现:
有两个方法开启导航服务:
- 一个是在主线程同步开启,说会导致阻塞;
- 另外一个是异步开启,将结果回调到主线程.
之所以会打印上述日志,是因为我使用了异步开启导航服务.
如果我使用同步开启
[BNCoreServices_Instance startServices];就不会打印出有关定位的日志信息.
抱歉,我有强迫症,不喜欢日志框有打印,所以我选择了同步开启.
如果你觉得异步加载好,不会阻塞线程,可以无视打印日志的影响,你可以使用异步开启.
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。