** 背景:**
公司接口返回的数据有一个特点:如果某个字段没有值,就不返回这个字段。这就造成在模型中赋值的时候,有些属性为nil。如果直接使用这个字段,碰到为nil就会有问题。
以前的解决方法有两种:①在使用时对nil进行处理;②在给模型赋值时,手动一个个处理。但无论哪一种,都要手动去一个个写太麻烦,今天查资料找到了下面的方法:
思路:用循环遍历模型中的属性,拿到属性名(propertyname)后,再用kvc取出属性值(propertyValue)进行判断,如果属性值为空,则把它赋值为空字符串“”,然后把属性值赋给属性。
关键部分代码:需要#import <Objc/runtime.h>
<code>
id matchBeanClass = objc_getClass("Foo");
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(matchBeanClass, &outCount);
for (i = 0; i < outCount; i++) {//循环读取self的属性列表
objc_property_t property = properties[i];
fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)];
NSString *propertyValue = [self valueForKey:propertyName];
if (!propertyValue) {//如果值不存在,则赋值为“”
propertyValue = @"";
}else{
propertyValue = [NSString stringWithFormat:@"%@", propertyValue];
}
[self setValue:propertyValue forKey:propertyName];
}
<code>