iOS 基础iOS点点滴滴iOS Developer

坑逼的 iOS 11数组语法糖

2018-01-22  本文已影响80人  游城十代2dai

0x00 题记

最近老板买了一套直播代码, 在运行 iOS 端的时候一堆问题, 主要是因为 iOS 11的, 有一些是后台问题(域名接入问题), 还有一些是 SDK 比较老了, 老的原因还是因为 iOS 11默默的改了底层内容, 然后比较贴近的错误就是数组语法糖取值问题!!!


0x01 简单说些其他问题

错误内容: Declaration of 'select' must be imported from module 'Darwin.POSIX.sys.time'
解决办法: 引入头文件   #include <sys/time.h>
原因是:   Xcode 9 放弃了 select 方法, 必须引入 sys/time.h
错误内容: check_compile_time() expected parameter declarator
解决办法: 将 check_compile_time 修改为 __Check_Compile_Time
原因是:  Xcode 9 中 usr/include/AssertMacros.h 这个路径文件内的宏不一样了原始写法为 __Check_Compile_Time

在项目中, 对 navigationBar 的子视图遍历 hidden 了一遍, 但是 iOS 11 的时候就出问题了, 结果查找发现 iOS 11可以不管 _UIbarBackground 的 alpha, 其本身就是透明色, 改变其 subview 的 alpha 就好了

UIView * barBackground = self.navigationController.navigationBar.subviews.firstObject;
if (@available(iOS 11.0, *)) {
   [barBackground.subviews setValue:@(0) forKeyPath:@"alpha"];
} else {
   barBackground.alpha = 0;
}

0x02 数组语法糖问题


2018年03月30日 由于 HOOK 出现莫名的 crash

// 错误信息
-[UIKeyboardLayoutStar release]: message sent to deallocated instance 0x1489ab450
// crash 场景, 使用 Runtime 处理异常, 所有用到键盘的地方, 使用键盘后, 在用 home 键进入后台, 就是报这个错误, 控制台是有的

这个错误是因为使用了 HOOK 导致 ARC 大姨妈了, 所以需要将使用到的 Runtime 处理异常代码文件用 -fno-objc-arc 标记起来, 这样就不会 crash 了

还有标记后, build 可能报下面这个错误:

// 我这里是 RAC 的几个文件出现的错误, 解决办法如下
Cannot create __weak reference in file using manual reference counting
上一篇下一篇

猜你喜欢

热点阅读