关于项目兼容7.0版本的bug.

公司的项目刚刚上线.因为要兼容7.0版本.遇到以下bug.分享给大家:

[array subarrayWithRange:NSMakeRange(logCeshi,3)]
造成闪退的原因:是因为logCeshi的值为负数了,而logCeshi是NSInteger类型.如果为负数就默认为18446744073709551615.超出数组范围了

2.- (NSInteger)component:(NSCalendarUnit)unit fromDate:(NSDate *)date NS_AVAILABLE(10_9, 8_0);方法8.0才出来,使用 NSDate *nowDate = [fq_dateFormatter dateFromString:[fq_dateFormatter stringFromDate:[NSDate date]]];来间接转换

3.NSLayoutConstraint类的setActive方法8.0才有.
_topViewRatio.active = NO; 做一次系统版本判断

4.setObject: forked: 中的object是不能够为nil的: key可以是任何的类型
setValue: forked: 中的value能够为nil,当value为nil时.会自动调用removeObject:forked方法, key只能够是NSString类型,

5.报错异常:
-[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]
自己模拟的效果代码是:
NSString * key = @"kaishi"; id object = nil; NSDictionary *dict = @{@"在了":@"开始",key:object};
//也就是说.这种初始化.需要保证value的值不能为nil.做一次判断

同理数组也会有这种bug
NSString * key = @"kaishi"; id object = nil; NSArray * array = @[object,key];
错误提示
'*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]’
//解决.做一次判断即可

6.-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x37a36588
这个是null调用了 isEqualToString的方法.加一个判断就行了

  1. id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSData *data = nil;时会报错.
    NSLog(@"%@",json);
    需要做一次判断即可

8.==>数组越界的问题 .添加一个判断即可
-(id)fq_objectAtIndex:(NSUInteger)index { //需要判断数组.当个数为0的时候.直接给用户返回nil.当用户的index大于数组的长度时.我们返回nil.防止崩溃 if (self.count == 0 || self.count < index) { return nil; }else { //方法已经替换 return [self objectAtIndex:index]; } }

9.还有第10个bug:
#0 Thread SIGSEGV SEGV_ACCERR 8 UIKit +[UIViewController _traverseViewControllerHierarchyWithDelayedRelease:] + 424 9 UIKit -[UIApplication _performMemoryWarning] + 252
暂时没有头绪.估计是AFN版本过低.已经升级到3.0.后期根据bugly的反馈来确定这个问题

10.AFN更新的bug:
10.1我们从2.6升级到3.0.然后还有一个七牛的SDK有指定一个AFN的版本.之前使用的旧版本的七牛.指定的AFN 2.0.所以会有冲突.一定要保证七牛也更新为最新版本
10.2更新完成以后.我们运行.会报一个
一直报[FQ_ShareDataNetworking GET:parameters:progress:success:failure:]: unrecognized selector sent to instance 0x7fe350f834b0的错误,解决的方法
删除build 然后重新update一下.
那么怎么删除build呢????
打开xcode ->preferences(偏好设置)->Locations(最后一个)->Advanced->Legacy(打钩)
你就可以在项目文件中看到神奇的build文件了.-->直接删除.

11..- (BOOL)containsString:(NSString *)str NS_AVAILABLE(10_10, 8_0);
字符串包含方法是8.0出来的.我们可以通过一个字符串在另一个字符串的range做间接判断.

喜欢就给个赞

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容