我们在做项目一直遇到一个坑的问题,程序在获取某些数据之后莫名崩溃。这个是因为我们获取的返回数据里面有空值。为了处理这个问题,封装一个字典的Category,我们可以在模型赋值处理时用这个Category过滤判断空值。
.h文件的方法说明
#import <Foundation/Foundation.h>
@interface NSDictionary (ValueNoNull)
/**
获取String类型value,如果value为空返回@""
*/
-(nonnull NSString*)getStringValueForKey:(nonnull id)key;
/**
获取Integer类型value,如果value为空返回0
*/
-(NSInteger)getIntegerValueForKey:(nonnull id)key;
/**
获取double类型value,如果value为空返回0.0
*/
-(double)getDoubleValueForKey:(nonnull id)key;
/**
获取float类型value,如果value为空返回0.0
*/
-(float)getFloatValueForKey:(nonnull id)key;
/**
获取array类型value,如果value为空返回@[]
*/
-(nonnull NSArray*)getArrayValueForKey:(nonnull id)key;
/**
获取dictionary类型value,如果value为空返回@{}
*/
-(nonnull NSDictionary*)getDictionaryValueForKey:(nonnull id)key;
-(nonnull NSNumber*)getNumberValueForKey:(nonnull id)key;
.m文件的方法实现
-(NSString *)getStringValueForKey:(id)key
{
NSString *str;
id value = [self objectForKey:key];
if(value == nil || [value isEqual:[NSNull null]])
{
str = @"";
}
if([value isKindOfClass:[NSString class]])
{
str = value;
}
else
{
str = @"";
}
return str;
}
-(NSInteger)getIntegerValueForKey:(id)key
{
NSInteger v = 0;
id value = [self objectForKey:key];
if(value != nil && ![value isEqual:[NSNull null]] && [value isKindOfClass:[NSNumber class]])
{
v = [value integerValue];
}
return v;
}
-(double)getDoubleValueForKey:(id)key
{
double v = 0.0;
id value = [self objectForKey:key];
if(value != nil && ![value isEqual:[NSNull null]] && [value isKindOfClass:[NSNumber class]])
{
v = [value doubleValue];
}
return v;
}
-(float)getFloatValueForKey:(id)key
{
float v = 0.0f;
id value = [self objectForKey:key];
if(value != nil && ![value isEqual:[NSNull null]] && [value isKindOfClass:[NSNumber class]])
{
v = [value floatValue];
}
return v;
}
-(NSArray *)getArrayValueForKey:(id)key
{
NSArray *array;
id value = [self objectForKey:key];
if(value != nil && ![value isEqual:[NSNull null]] && [value isKindOfClass:[NSArray class]])
{
array = value;
}
else
{
array = @[];
}
return array;
}
-(NSDictionary *)getDictionaryValueForKey:(id)key
{
NSDictionary *dict;
id value = [self objectForKey:key];
if(value != nil && ![value isEqual:[NSNull null]] && [value isKindOfClass:[NSDictionary class]])
{
dict = value;
}
else
{
value = @{};
}
return dict;
}
-(NSNumber*)getNumberValueForKey:(id)key
{
NSNumber *number;
id value = [self objectForKey:key];
if(value != nil && ![value isEqual:[NSNull null]] && [value isKindOfClass:[NSNumber class]])
{
number = value;
}
else
{
number = @0;
}
return number;
}