一、向容器添加對象
主要指NSMutableArray、NSMutabledictionary。向這兩個容器添加nil,會引起崩潰。
分為兩種模式 1.傳入 2.獲取
所以在傳入前,需要對傳入的內容進行非錯判斷
1.傳入數據的規避措施
NSString *addString = nil;
NSMutableArray *mArray = [NSMutableArray array];
if (addString != nil) {
[mArray addObject:addString];
} else {
NSLog(@"xx類xx方法試圖向數組mArray傳入一個nil");
}
2.從網上獲取的規避措施
// 直接替換字典空值為@""
+ (NSDictionary *)deleteAllNullValueWithDictionary:(NSDictionary *)dict {
NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
for (NSString *keyStr in dict.allKeys) {
if ([[dict objectForKey:keyStr] isEqual:[NSNull null]]) {
[mutableDic setObject:@"" forKey:keyStr];
} else {
[mutableDic setObject:[dict objectForKey:keyStr] forKey:keyStr];
}
}
return mutableDic;
}
二、從容器取數據
主要指NSArray、NSMutableArray。從array里取數據,要注意防止下標數組越界。
一般要讀取某個動態生成的容器里的內容,需要先對這個容器進行檢查
NSArray *array = 動態生成;
if (array != nil && array.count > 0) { //讀取里面的內容 }else { //輸出錯誤信息}
NSArray *array = @[@"a", @"b", @"c"];
int index = 5;
if (index < array.count) {
NSString *testString = array[index];
} else {
NSLog(@"xx類xx方法試圖從數組mArray取一個超出count的對象");
}
三、調用其他類的方法或不知道要調用的方法當前SDK版本是否支持。需要先判斷一下這個方法是否存在。
if ([self.delegate respondsToSelector:@selector(要調用的方法)]) {
[self.delegate 要調用的方法];
}