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];
}
如下图: