您的位置:首页 > 其它

KVO

2015-07-21 19:59 211 查看
//  StockModel.h
//  KVO
//
//  Created by 张国锋 on 15/7/20.
//  Copyright (c) 2015年 张国锋. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface StockModel : NSObject
@property (nonatomic,strong)NSString * stockName;
@property (nonatomic,strong)NSString * price;
/*.....*/
@end

//  StockModel.m
//  KVO
//
//  Created by 张国锋 on 15/7/20.
//  Copyright (c) 2015年 张国锋. All rights reserved.
//

#import "StockModel.h"

@implementation StockModel

-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
NSLog(@"UndefinedKey:%@",key);
}

@end


//  ViewController.h
//  KVO
//
//  Created by 张国锋 on 15/7/20.
//  Copyright (c) 2015年 张国锋. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

//
//  ViewController.m
//  KVO
//
//  Created by 张国锋 on 15/7/20.
//  Copyright (c) 2015年 张国锋. All rights reserved.
//

#import "ViewController.h"
#import "StockModel.h"
@interface ViewController ()
{
StockModel *_model;
UILabel *_label;
}
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//实例化一个股票,使用setValuesForKeysWithDictionary给所有属性赋值
_model=[StockModel new];
NSDictionary *dic=[NSDictionary dictionaryWithObjects:@[@"A股",@"10.0"] forKeys:@[@"stockName",@"price"]];

[_model setValuesForKeysWithDictionary:dic];
//_model.price=@"22";
/*
1、observer-发送通知的对象
2、keyPath-对象的key,需要观察的属性
3、options-告诉观察者观察的是什么
4、context-被观察者对象传⼊入的context

*/
[_model addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

//label 显示股票的价格
_label=[[UILabel alloc]initWithFrame:CGRectMake(10, 70, 300, 300)];
_label.text=[_model valueForKey:@"price"];
_label.textAlignment=NSTextAlignmentCenter;
_label.backgroundColor=[UIColor redColor];
[self.view addSubview:_label];
_label.font=[UIFont systemFontOfSize:50];

UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(10, 380, 300, 60)];
[btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[btn setBackgroundColor:[UIColor greenColor]];
[btn setTitle:@"股票涨" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[self.view addSubview:btn];
}
//change-包含变化之前与变化之后属性值的字典
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if ([keyPath isEqualToString:@"price"]) {
_label.text=[_model valueForKey:@"price"];
NSLog(@"%@",change);
}
}

-(void)btnClick{
NSLog(@"涨");
[_model setValue:@"20.0" forKey:@"price"];
_model.price=@"12";
//_label.text=@"123";
}

-(void)dealloc{
[_model removeObserver:self forKeyPath:@"price"];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: