iOS開發中,對請求資料出現的一些簡單處理
這裡呢是整理的一位老鳥的東西,好東西得分享
大致實現思路就是迴圈便利做比較,如果發現是NSNull型別的就把值改為空字串;這樣的好處就是當資料請求回來,刪除一下資料裡面為<null>型別的東西,避免在直接取的時候產生程式崩潰問題;
兩個方法,一個返回NSArray,一個是NSDictionary,根據需求選擇
.h 檔案
/**
* 伺服器返回的資料為<null>時的處理
*
* @param dic 經處理過後的資料,資料型別為字典,避免直接取資料時出現程式崩潰現象。
*/
- (NSDictionary *)deleteEmpty:(NSDictionary *)dic;
/**
* 伺服器返回的資料為<null>時的處理
*
* @param dic 經處理過後的資料,資料型別為陣列,避免直接取資料時出現程式崩潰現象。
*/
- (NSArray *)deleteEmptyArr:(NSArray *)arr;
.m 檔案
@implementation NSObject (DeleteArrOrDeleteDicBothNull)
- (NSDictionary *)deleteEmpty:(NSDictionary *)dic
{
NSMutableDictionary *mdic = [[NSMutableDictionary alloc] initWithDictionary:dic];
NSMutableArray *set = [[NSMutableArray alloc] init];
NSMutableDictionary *dicSet = [[NSMutableDictionary alloc] init];
NSMutableDictionary *arrSet = [[NSMutableDictionary alloc] init];
for (id obj in mdic.allKeys)
{
id value = mdic[obj];
if ([value isKindOfClass:[NSDictionary class]])
{
NSDictionary *changeDic = [self deleteEmpty:value];
[dicSet setObject:changeDic forKey:obj];
}
else if ([value isKindOfClass:[NSArray class]])
{
NSArray *changeArr = [self deleteEmptyArr:value];
[arrSet setObject:changeArr forKey:obj];
}
else
{
if ([value isKindOfClass:[NSNull class]]) {
[set addObject:obj];
}
}
}
for (id obj in set)
{
mdic[obj] = @"";
}
for (id obj in dicSet.allKeys)
{
mdic[obj] = dicSet[obj];
}
for (id obj in arrSet.allKeys)
{
mdic[obj] = arrSet[obj];
}
return mdic;
}
- (NSArray *)deleteEmptyArr:(NSArray *)arr
{
NSMutableArray *marr = [NSMutableArray arrayWithArray:arr];
NSMutableArray *set = [[NSMutableArray alloc] init];
NSMutableDictionary *dicSet = [[NSMutableDictionary alloc] init];
NSMutableDictionary *arrSet = [[NSMutableDictionary alloc] init];
for (id obj in marr)
{
if ([obj isKindOfClass:[NSDictionary class]])
{
NSDictionary *changeDic = [self deleteEmpty:obj];
NSInteger index = [marr indexOfObject:obj];
[dicSet setObject:changeDic forKey:@(index)];
}
else if ([obj isKindOfClass:[NSArray class]])
{
NSArray *changeArr = [self deleteEmptyArr:obj];
NSInteger index = [marr indexOfObject:obj];
[arrSet setObject:changeArr forKey:@(index)];
}
else
{
if ([obj isKindOfClass:[NSNull class]]) {
NSInteger index = [marr indexOfObject:obj];
[set addObject:@(index)];
}
}
}
for (id obj in set)
{
marr[(int)obj] = @"";
}
for (id obj in dicSet.allKeys)
{
int index = [obj intValue];
marr[index] = dicSet[obj];
}
for (id obj in arrSet.allKeys)
{
int index = [obj intValue];
marr[index] = arrSet[obj];
}
return marr;
}
@end