KVC的使用(对一个对象的成员变量进行操作(赋值/取值))
2014-09-22 19:04
399 查看
切记:请求的数据要存在相应的类中,不能在加载试图中请求数据
KVC就是对请求数据的一个简化
MainViewController.m
KVC就是对请求数据的一个简化
MainViewController.m
#import "MainViewController.h" #import "Student.h" @interface MainViewController () @end @implementation MainViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor cyanColor]; //KVC的使用 Student *stu = [[Student alloc] init]; //KVC的作用:对一个对象的成员变量进行操作(赋值/取值) //赋值的方法 [stu setValue:@"adfasdf" forKey:@"name"]; // [stu setValue:@"米4像苹果1" forKey:@"Name"]; //第一个查找 // [stu setValue:@"米4像苹果2" forKey:@"_Name"]; //找不到 // [stu setValue:@"米4像苹果3" forKey:@"_name"]; // //这个是一个类中的属性赋值 // stu setValue:<#(id)#> forKeyPath:<#(NSString *)#> NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"222", @"StudentID", @"liuyafang", @"name" ,nil]; [stu setValuesForKeysWithDictionary:dic]; //取值的方法 NSLog(@"%@",[stu valueForKey:@"name"]); //KVO 键值观察 (注册一个观察者)(自己监视自己对象的内容) //参数1:观察谁 //参数2:观察哪个属性 //参数3:在实现方法中获得新值合适旧值 //参数4:任意的指针类型 [stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"aaa"]; stu.name = @"pingguo45"; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"%@",keyPath); NSLog(@"%@",object); NSLog(@"%@",change); NSLog(@"%@",context); } - (void)dealloc { // self removeObserver:<#(NSObject *)#> forKeyPath:<#(NSString *)#> [super dealloc]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @endStudent.h
#import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic , retain)NSString *name; @property (nonatomic , retain)NSString *sex; @property (nonatomic , retain)NSString *studengID; //利用kvc对model进行封装 - (instancetype) initWihtDictionary:(NSDictionary *)dic; @endStudent.m
#import "Student.h" @implementation Student - (void)setValue:(id)value forUndefinedKey:(NSString *)key { //这个方法在类的内部实现,就用就是纠错 //一旦在赋值过程中,发现key没有周到对应的成员变量,就会调用这个发放 //如果没有重写个方法,就会crash if ([key isEqualToString:@"id"]) { _studengID = value; } } - (id)valueForUndefinedKey:(NSString *)key { //取值的纠错方法 if ([key isEqualToString:@"id"]) { return self.superclass; } return nil; } - (instancetype) initWihtDictionary:(NSDictionary *)dic { self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dic]; } return self; } - (void)dealloc { [_name release]; [_sex release]; [super dealloc]; } @end
相关文章推荐
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
- 一个java3d程序,作为熟悉3d技术的基础(可以使用鼠标对场景内的3d对象进行操作)
- 继承 单继承 多层继承 成员变量:this & super ; 成员函数:覆盖操作; 一个对象实例化过程!!
- 设计一个电视机类,成员变量包括电视机编号、生产厂家、品牌名称、大小、开关状态,并可以对其进行相应操作,如打开电视、提高/降低音量、更换频道等。
- 重写——上转型对象不能操作子类新增成员变量和方法但可以操作子类继承和重写的方法
- 一个使用bouncycastle进行安全操作的实用类
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- 《windows核心编程学习笔记》——使用互斥量变量内核对象进行线程同步
- 一个使用GridView显示数据,并且可以进行添加、修改、删除操作的例子
- 定义一个描述“点”的类及该类的对象,并使用构造函数初始化数据成员
- 使用SharePoint 2010 客户端对象模型进行文档库及文档的操作
- 使用java类SequenceInputStream 对一个文件进行分割和合并的操作
- 使用 final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- Factory 定义一个接口,客户可以使用这个接口创建一个对象.同时,我们还可以控制对那个类进行实例化
- 新new 的一个对象不对它进行任何操作,直接返回,将返回什么?
- php的list()的一步操作给一组变量进行赋值的使用
- php的list()的一步操作给一组变量进行赋值的使用
- 两层指针共用一个智能指针控制基本对象的操作--成员访问操作符
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)