崩溃现象
最近发现在iOS13.6系统上点击UITextField开始编辑时,会百分百复现一个崩溃现象,报错内容如下:
崩溃堆栈截图.png
主要在CGRectMake设置等中存在错误可能是除0等操作了,网上很多帖子都是让你去检查每一个UI,然而并没有从根源上解决问题,尤其是多个UITextField设置不同keyboardType需要在不同键盘之间切换时,仍然会偶现崩溃。
解决办法
附上代码GitHub链接:https://github.com/Geniune/SafeProtector
见UIView+Safe.h和UIView+Safe.m两个文件
NaN,Not a Number的缩写
判断NaN
使用下面方法:
isnan();
我的思路是使用Runtime来替换UIView对应setFrame:和setCenter:等方法,判断是否出现nan:
+ (void)load{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[self exchangeInstance:[self class] selector:@selector(setFrame:) withSwizzledSelector:@selector(safe_setFrame:)];
[self exchangeInstance:[self class] selector:@selector(setCenter:) withSwizzledSelector:@selector(safe_setCenter:)];
});
}
- (void)safe_setFrame:(CGRect)frame{
{
CGRect viewFrame = frame;
if(isnan(viewFrame.origin.x)){
viewFrame.origin.x = 0;//如果为NaN,就设置为0
}
@try {
[self safe_setFrame:viewFrame];
} @catch (NSException *exception) {
//exception
} @finally {
}
}
如果本文对你有所帮助记得点个赞哈 :)
网友评论