解决接口返回数据,某些字段为nil的问题

2016-07-27  本文已影响42人  zanyzephyr

** 背景:**

公司接口返回的数据有一个特点:如果某个字段没有值,就不返回这个字段。这就造成在模型中赋值的时候,有些属性为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>

参考:http://blog.csdn.net/cubesky/article/details/38753885

上一篇 下一篇

猜你喜欢

热点阅读