KVC是KeyValue Coding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。
当使用KVO、Core Data、CocoaBindings、AppleScript(Mac支持)时,KVC是关键技术。
如何使用KVC
关键方法定义在:NSKeyValueCodingprotocol
KVC支持类对象和内建基本数据类型。
获取值
valueForKey:,传入NSString属性的名字。
valueForKeyPath:,传入NSString属性的路径,xx.xx形式。
valueForUndefinedKey它的默认实现是抛出异常,可以重写这个函数做错误处理。
修改值
setValue:forKey:
setValue:forKeyPath:
setValue:forUndefinedKey:
setNilValueForKey: 当对非类对象属性设置nil时,调用,默认抛出异常。
一对多关系成员的情况
mutableArrayValueForKey:有序一对多关系成员 NSArray
mutableSetValueForKey:无序一对多关系成员 NSSet
main.m文件
//KVC 进行赋值
[teacher setValue:@"zhangsan" forKey:@"name"];
[teacher setValue:@"man" forKey:@"_sex"];
[teacher setValue:@16 forKey:@"age"];
[teacher setValue:@70 forKey:@"weight"];
[teacher setValue:@"空心菜" forKeyPath:@"stu.name"];
NSLog(@"学生的姓名: %@",teacher.stu.name);
[teacher hello];
//KVC取值
NSLog(@"name: %@ sex: %@ age: %@ stuname: %@",[teacher valueForKey:@"name"],[teacher valueForKey:@"sex"],[teacher valueForKey:@"age"],[teacher valueForKeyPath:@"stu.name"]);
[teacher valueForKey:@"money"];
NSDictionary *dic = @{@"name":@"zhangsan",@"sex":@"man",@"age":@100};
[teacher setValuesForKeysWithDictionary:dic];
[teacher hello];