Objective-C语法之KVC的使用
除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding(KVC)键值编码来访问你要存取的类的属性。
下图来自苹果官网:
如何使用KVC存取对象属性呢?看个示例
1、使用KVC
定义一个Student类,继承于NSObject。
.h文件
- #import <Foundation/Foundation.h>
- @interface Student : NSObject
- {
- NSString *name;
- }
- @end
.m文件
- #import "Student.h"
- @implementation Student
- @end
.m文件也没有实现。name属性没有加property,原来的访问方法就访问不了name属性了。怎么办呢?用kvc就可以了
- #import "Student.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- Student *student = [[[Student alloc]init ]autorelease];
- [student setValue:@"张三" forKey:@"name"];
- NSString *name = [student valueForKey:@"name"];
- NSLog(@"学生姓名:%@",name);
- }
- return 0;
- }
打印结果:
2012-07-20 15:04:09.920 objectiveC[1977:403] 学生姓名:张三
张三 这个值存进去了,通过valueForKey取出来了。
如果存的时候key和类属性的名称不一致会怎么样呢?
代码改成
[student setValue:@"张三" forKey:@"name1"];
运行,程序崩溃 ,打印:
2012-07-20 15:09:40.432 objectiveC[2069:403] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Student 0x106f14270> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name1.'
提示没有这个name1 这个key。