公司的項目剛剛上線.因為要兼容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做間接判斷.
喜歡就給個贊