网络请求返回来的数据中有可能是NSNull型的数据,而非我们希望的数据类型。
如:在对一个原本为NSArray型的数据dataArr取其length时,此时dataArr实际上是NSNull型的,再取length时程序就回崩溃。
对于网络请求返回来的数据,应该判断之后再做处理。将所有的NSNull型的数据更换为空字符串@""。
//递归算法,去掉返回数据当中的所有NSNull型的数据
+ (id)removeNSNullObjectFromeData:(id)data {
if ([data isKindOfClass:[NSDictionary class]]) {
NSMutableDictionary *resultDic = [NSMutableDictionary dictionary];
[data enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSNull class]]) {
//将NSNull型的数据换成空字符串@""
[resultDic setValue:@"" forKey:key];
}else {
//如果是非NSNull型的数据进入递归
obj = [self removeNSNullObjectFromeData:obj];
[resultDic setValue:obj forKey:key];
}
}];
return resultDic;
}else if ([data isKindOfClass:[NSArray class]]) {
NSMutableArray *resultArr = [NSMutableArray array];
[data enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSNull class]]) {
//将NSNull型的数据换成空字符串@""
[resultArr addObject:@""];
}else {
//如果是非NSNull型的数据进入递归
obj = [self removeNSNullObjectFromeData:obj];
[resultArr addObject:obj];
}
}];
return resultArr;
}else {
return data;
}
}
网友评论