公司的项目刚刚上线.因为要兼容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的方法.加一个判断就行了
-
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做间接判断.
喜欢就给个赞