除了一般的赋值和取值的方法,我们还可以用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。