KVC的用法

来源:互联网 发布:java 重写hashcode方法 编辑:程序博客网 时间:2024/05/21 10:58

试着用一种极为简单的例子来探索下KVC的用法,看完本文,相信会对大家的KVC的认识有一定的帮助.注意看代码.


KVC,即:Key-value coding,它是一种使用字符串标识符,间接访问对象属性的机制,它是很多技术的基础。

主要的方法就两个,setValue:forKey(setValuesForKeysWithDictionary),valueForKey.

主要用于Datamodel中的数据处理.使用该方法可以大大的简化代码,直接访问赋值model类中的属性的值.其中setvalue forkey 相当于setter方法.valueforkey相当于getter方法.以下为简单的使用实例.

创建一个Person类.也就是我们常用的dataModel类.

#import <Foundation/Foundation.h>#import "A.h"@interface Person : NSObject{    NSString *_name;    int _age;    NSString *_sex;    A *_a;}- (void)sayHi;@end
以下为.m文件

#import "Person.h"@implementation Person- (void)dealloc{    [_name release];    [_sex release];    [super dealloc];}-(void)setValue:(id)value forUndefinedKey:(NSString *)key{//     NSLog(@"key==%@",key);}- (void)sayHi{    NSLog(@"name = %@ age = %d sex = %@ ",_name,_age,_sex);    [_a ss];}@end
其中的setValue:forUndefindeKey:方法用来告诉系统使用setValue:forKey: 寻找不到key的时候,通知系统不必报错.

#import <Foundation/Foundation.h>@interface A : NSObject{    NSString *_test;}- (void)ss;@end
#import "A.h"@implementation A- (void)dealloc{    [_test release];    [super dealloc];}- (void)ss{    NSLog(@"+++%@",_test);}@end



以下为实现.其中我的plist文件为一个字典里面有多个数组,每个数组中包含多个字典

NSString *file = [[NSBundle mainBundle] pathForResource:@"PersonData" ofType:@"plist"];    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:file];    NSDictionary *d = [[dic objectForKey:@"C"]objectAtIndex:0];    Person *p = [[Person alloc] init];    [p setValuesForKeysWithDictionary:d];        [p setValue:@"LiSi" forKey:@"name"];    [p setValue:@"nan" forKey:@"sex"];    [p setValue:[NSNumber numberWithInt:20] forKey:@"age"];            A *aaa = [[A alloc] init];    //NSLog(@"%@",aaa);    [p setValue:aaa forKey:@"a"];    [p setValue:@"haha" forKeyPath:@"a.test"];    NSLog(@"-----%@",[p valueForKey:@"sex"]);    [p sayHi];


2 0
原创粉丝点击