(1)KVC
NSKeyValueCoding 键-值-编码
1 、概述
KVC是KeyValue Coding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。
当使用KVO、Core Data、CocoaBindings、AppleScript(Mac支持)时,KVC是关键技术。
2、如何使用KVC
关键方法定义在:NSKeyValueCodingprotocol
KVC支持类对象和内建基本数据类型。
获取值
valueForKey:,传入NSString属性的名字。
valueForKeyPath:,传入NSString属性的路径,xx.xx形式。
valueForUndefinedKey它的默认实现是抛出异常,可以重写这个函数做错误处理。
修改值
setValue:forKey: // forKey:NSString属性的名字。
setValue:forKeyPath: //forKey:NSString属性的路径,xx.xx形式。
setValue:forUndefinedKey:
setNilValueForKey: 当对非类对象属性设置nil时,调用,默认抛出异常。
一对多关系成员的情况
mutableArrayValueForKey:有序一对多关系成员 NSArray
mutableSetValueForKey:无序一对多关系成员 NSSet
例:
// 第一种利用KVC方式赋值 ValueForKey
Classes *cls = [[Classes alloc] init];
[cls setValue:@"46 iOS" forKey:@"name"];
NSLog(@"cls = %@",[cls valueForKey:@"name"]);
Student *stu = [[Student alloc] initWithName:@"licy" andage:23];
[stu setValue:cls forKey:@"cls"];
NSLog(@"stu.cls = %@",[cls valueForKey:@"name"]);
// 第二种KVC赋值方式 valueForKeyPath
Student *stu = [[Studentalloc]initWithName:@"licy"andage:4];
Classes *temp = [[Classesalloc] init];
[stu setValue:temp forKey:@"cls"];
[stu setValue:@"iOS"forKeyPath:@"cls.name"];
NSLog(@"stu cls name =%@",[stu valueForKeyPath:@"cls.name"]);