ios KVC模式主要用到以下几个方法:
1、- (
void)setValue:(
id)value forKey:(
NSString *)key;
2、- (id)valueForKey:(NSString *)key;
3、- (id)valueForKeyPath:(NSString *)keyPath;
4、- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
通过第1个方法,我们可以给对象以属性名为key设置一个value值,
通过第2个方法,我们可以获取对象以属性名为key的一个value值,
通过第3个方法,我们可以获取一个以属性名为为路径(key1.key2)的一个value值,
通过第4个方法,我么可以给对象以属性名为路径(key1.key2)设置一个value值。
下面我们举例说明:
在命令行下创建一个KVCTest工程
首相创建两个对象类(Jobs和Device):
//.m文件中什么也不用写
#import
@interface Jobs : NSObject
{
NSMutableArray *_deviceArray;
}
@end
#import
@interface Device : NSObject
{
NSString *_name;
NSNumber *_price;
}
@end
然后在main中
#import
#import "Jobs.h"
#import "Device.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Jobs *jobs = [[Jobs alloc]init];
NSMutableArray *deviceArr = [[NSMutableArray alloc] initWithCapacity:3];
//注意都是以类中属性作为key值的
Device *macbook = [[Device alloc]init];
[macbook setValue:@"macbook" forKey:@"_name"];
[macbook setValue:@12 forKey:@"_price"];
[deviceArr addObject:macbook];
macbook = [[Device alloc]init];
[macbook setValue:@"iphone" forKey:@"_name"];
[macbook setValue:@13 forKey:@"_price"];
[deviceArr addObject:macbook];
macbook = [[Device alloc]init];
[macbook setValue:@"ipad" forKey:@"_name"];
[macbook setValue:@14 forKey:@"_price"];
[deviceArr addObject:macbook];
[jobs setValue:deviceArr forKey:@"_deviceArray"];
NSLog(@"%@",[[[jobs valueForKey:@"_deviceArray"] objectAtIndex:0] valueForKey:@"_name"]);
//通过key值取值
NSLog(@"%@",[jobs valueForKeyPath:@"_deviceArray._name"]);//通过路径获取value
//通过sum min max avg count可以对NSNumber类型数据进行简单计算
NSLog(@"%@",[jobs valueForKeyPath:@"deviceArray.@count"]);
NSLog(@"%@",[jobs valueForKeyPath:@"deviceArray.@sum._price"]);
}
return 0;
}