KVC是给对象的成员变量赋值和拿到成员变量的值得另一种方式(也可通过调用set方法和get方法实现)
创建一个学生类,在头文件中声明几个属性
@property(nonatomic, copy) NSString * name;//姓名
@property(nonatomic, copy) NSString * sex;//性别
@property(nonatomic, assign) float face;//颜值
在回到ViewController.m中
通过key-path的方式给属性赋值
// 创建一个学生对象stu
[stu setValue:@"老王" forKey:@"name"];
[stu setValue:@"男" forKey:@"sex"];
[stu setValue:@"99" forKey:@"face"]
注:通过KVC的方式去操作成员变量的时候,key值要与属性名保持一致。否则会导致崩溃,但是这个崩溃是可以解决的
解决因为KVC的key值和属性名不一致而造成的崩溃问题
a.赋值的时候key值和属性不一样:
重写setValue:forUnderfineKey:方法
b.获取值得时候,key值和属性名不一样:
重写valueForUndefinedKey:方法
在学生类的.m文件中重写
//1.重写这个方法可以避免因为调用KVC的方法给成员变量赋值的时候,因为key写错而造成的崩溃问题
//2.将指定的key对应的值,赋给另外一个key对应的值(一般用在通过字典给属性赋值的时候)
//参数1:给写错的key对应的成员变量赋的值
//参数2:写错的key值
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
}
//返回值:重新指定因为key错误而找不到返回值的方法的新的返回值(给valueForKey:方法返回一个新的返回值)
//参数:错误的key值
- (id)valueForUndefinedKey:(NSString *)key{
return [NSString stringWithFormat:@"%@错误!!!", key];
}