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];
}