博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习笔记:更新Xcode9后用iPhone X 运行遇到的一些问题
阅读量:5774 次
发布时间:2019-06-18

本文共 2279 字,大约阅读时间需要 7 分钟。

1. 控制台打印线程问题

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

PID: 4940, TID: 93956, Thread name: (none), Queue name: WriteLogQueue, QoS: 0

造成原因是因为原本 需要在主线程执行的代码 被放在了子线程里边

解决方法:在scheme 里边取消主线程检测 (不建议使用) 建议修改代码 把出问题的代码放在主线程里面就行了

 

 

2.运行程序直接崩溃问题,起初崩溃直接跳到main.m文件中 控制台打印的日志也是一堆毫无头绪的东西,没有报错信息,也没告诉崩在哪里,

搜索半天没有有效解决方法,所以就开始了最基本的断点调试,一点点调试之后报错提示变成了下面:给了详细的报错信息 

[Bugly]  Trapped uncaught exception 'NSUnknownKeyException', reason: '[<UIStatusBar_Modern 0x7fab69509e40> valueForUndefinedKey:]: this class is not key value coding-compliant for the key foregroundView.' 

(

0   CoreFoundation                      0x000000010b81612b __exceptionPreprocess + 171

1   libobjc.A.dylib                     0x000000010a92bf41 objc_exception_throw + 48

2   CoreFoundation                      0x000000010b816079 -[NSException raise] + 9

3   Foundation                          0x000000010a4179ae -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 226

4   Foundation                          0x000000010a342d80 -[NSObject(NSKeyValueCoding) valueForKey:] + 284

5   chenghuiguang                       0x0000000104d50335 -[BaseNetWorkService addHeader] + 1125

6   chenghuiguang                       0x0000000104d4f9b6 -[BaseNetWorkService initOperationManager] + 854

7   chenghuiguang                       0x0000000104d4f622 -[BaseNetWorkService init] + 114

8   chenghuiguang                       0x0000000104eb481e -[WaittingViewController initData] + 62

9   chenghuiguang                       0x0000000104eb4799 -[WaittingViewController viewDidLoad] + 73

.

.

根据报错提示找到了我的BaseNetWorkService文件下 addHeader方法,再根据错误提示搜索 查到了崩溃的原因 ,

详细解答请参考链接:

 

由于iPhone X的状态栏是和其他版本手机差异比较大的,因此api 变化也比较大, iPhone X的状态栏是多嵌套了一层,多取一次即可

我的项目中用到了 使用状态栏中图标判断当前网络的具体状态 ,所以用 iPhone X运行崩溃了

 

不能直接用 

[[[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews];

需要做判断UIStatusBar_Modern

    NSArray *subviewArray;

    // 不能用 [[self deviceVersion] isEqualToString:@"iPhone X"] 来判断,因为模拟器不会返回 iPhone X

    if([[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) {

        subviewArray = [[[[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"]       subviews];

    } else {

        subviewArray = [[[[UIApplication sharedApplication] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews];

    }

 如下图:

 

转载于:https://www.cnblogs.com/IOSwm/p/8150217.html

你可能感兴趣的文章
如何成为一个C++高级程序员
查看>>
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>
springboot系列十 Spring-Data-Redis
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
iOS: Block的循环引用
查看>>
MySQL类型转换
查看>>
变量声明提升1
查看>>
树莓派下实现ngrok自启动
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
Javascript 深入浅出原型
查看>>
Apache下.htaccess文件配置及功能介绍
查看>>
Magento XML cheatsheet
查看>>
haproxy mysql实例配置
查看>>
MySQL 8.0 压缩包版安装方法
查看>>