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 不会崩溃
}