iOS学习笔记:更新Xcode9后用iPhone X 运行遇到的一些问题

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方法,再根据错误提示搜索 查到了崩溃的原因 ,

详细解答请参考链接:http://blog.csdn.net/lucky_xiaofeng310/article/details/78359336

由于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

时间: 2024-11-05 13:43:57

iOS学习笔记:更新Xcode9后用iPhone X 运行遇到的一些问题的相关文章

iOS学习笔记-精华整理

iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁. 2-成员属性:     readonly:不指定readonly,默认合成getter和setter方法.外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全

iOS学习笔记22-推送通知

一.推送通知 推送通知就是向用户推送一条信息来通知用户某件事件,可以在应用退到后台后,或者关闭后,能够通过推送一条消息通知用户某件事情,比如版本更新等等. 推送通知的常用应用场景: 一些任务管理APP,会到任务时间即将到达时,通知你该做任务了. 健身APP定时提醒你应该健身了. 买过电影票,提前半个小时通知你,电影即将开场. 当你QQ或微信收到信息时,即使退到后台,也可以收到信息通知你. 电商APP,推送一条消息通知我们有新品上架等等. 推送通知的常用展示样式: 屏幕顶部显示一块横幅 在锁屏界面

IOS学习笔记 -- Modal和Quartz2D

一. Modal1.Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止;Modal只是改变了View的现实,没有改变rootViewController 2.常用方法1>.以Modal的形式展示控制器- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion2>.关

iOS学习笔记(1)— UIView 渲染和内容管理

iOS学习笔记(1)— UIView 渲染和内容管理 iOS中应用程序基本上都是基于MVC模式开发的.UIView就是模型-视图-控制器中的视图,在iOS终端上看到的.摸到的都是UIView. UIView在屏幕上定义了一个矩形区域和管理区域内容的接口.在运行时,一个视图对象控制该区域的渲染:UIView继承自UIResponder,UIResponder是用来响应事件的类,UIView也具有响应事件的能力.所以说UIView具有三个基本的功能,绘制内容并管理内容的布局,响应用户交互,动画.正是

【Smallfan的ios学习笔记】卷首引

[关于自己] 似乎先要自我介绍一下.首先我是一名三流专科院校的工科男生,所学的专业是计算机信息管理.计算机信息管理这个专业,说实话当时填报也并不了解,就冲着学校专业简介上面写着oracle开发运维而去,结果上天跟我开了个玩笑,这个专业分了两个方向,一个是系统开发与运用(SQL方向),一个是数据库运维与应用(oracle方向),很荣幸就被分到了SQL方向.一进这个专业,第一件事就是查询这三年将会开什么课程,课表如下: 简要筛选一下主要课程就是JAVA编程基础.JSP程序设计.JavaScript.

iOS学习笔记20-地图(二)MapKit框架

一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种方式可以对地图进行精准的控制 调用苹果官方自带的地图应用,主要用于一些简单的地图应用,无法精确控制 使用第三方地图开发SDK库 用得最多的还是MapKit,所以这节就只讲MapKit的使用. 二.MapKit核心类 MapKit的核心类为地图展示控件MKMapView,以下是常用的属性.对象方法以及

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON

iOS学习笔记---c语言第十天

动态内存分配 一.存储区划分 从低到高(内存地址小----内存地址大)  :  代码区---常量区---静态区---堆区---栈区 栈内存 //凡是在函数体内定义的变量 都存储在栈区(包括形参). int a = 10;//a也是在栈区域里面 float b = 1.5;//b也是在栈区域里面 char c = 'b'; double d = 3.14; printf("%p %p %p %p\n",&a,&b,&c,&d); //栈的特点先进后出,先定

iOS学习笔记13-网络(二)NSURLSession

在2013年WWDC上苹果揭开了NSURLSession的面纱,将它作为NSURLConnection的继任者.现在使用最广泛的第三方网络框架:AFNetworking.SDWebImage等等都使用了NSURLSession.作为iOS开发人员,应该紧随苹果的步伐,不断的学习,无论是软件的更新.系统的更新.API的更新,而不能墨守成规. 相比较NSURLConnection,NSURLSession提供了 配置会话缓存.协议.cookie和证书能力,这使得网络架构和应用程序可以独立工作.互不干