KVC 字典转模型(属性不全导致崩溃的解决方法)

字典转模型, KVC 是一个不折不扣的大招。但局限性在于 模型的属性必须包含字典的所有Key,不然就崩给你看。

曾一度被此折磨,后来接触运行时 获取属性列表 , 遍历字典做个判断过滤就可以了

/// 返回类的属性字符串数组

+ (NSArray *)properties {

    

    // 1. 获取类的属性信息

    unsigned int count = 0;

    // 所有属性的数组

    objc_property_t *list = class_copyPropertyList([self class], &count);

    

    NSLog(@"属性数量 %tu", count);

    // 2. 获取每一个属性的名字

    NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:count];

    

    for (int i = 0; i < count; ++i) {

        // 获取对应下标的属性

        objc_property_t p = list[i];

        

        // 获取名称

        const char *cname = property_getName(p);

        NSLog(@"%s", cname);

        

        [arrayM addObject:[NSString stringWithUTF8String:cname]];

    }

    

    // 释放数组

    free(list);

    

    return arrayM.copy;

}

 

直到今天发现自己弱爆了,其实苹果官方提供了一个方法可以过滤

只需要重写下面方法就可以了,我也是醉了

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{

    // 重写该方法可以 过滤不存在的 key KVC 不会崩溃

}

 

posted @ 2015-07-08 14:14  风中一场梦  阅读(266)  评论(0编辑  收藏  举报