自己testkvo的代码心的(有一行代码要特别的注意)

来源:互联网 发布:sftp端口号 编辑:程序博客网 时间:2024/06/16 09:06
<pre name="code" class="objc">NSString *name = [[self.stockForKVO valueForKey:@"price"]stringValue];
一定要先转换成stringvalue才行,不然的话,在label或者button上面打印的时候会出现问题。(没注意,搞了一会儿,注意下。)
#import "ViewController.h"#import "StockData.h"@interface ViewController ()//@property (nonatomic, strong  ) UILabel *myLabel;@property (nonatomic, strong ) UIButton *button;@property (nonatomic, strong) StockData *stockForKVO;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    StockData *stockForKVO = [[StockData alloc]init];        self.stockForKVO = stockForKVO;    [stockForKVO setValue:@"search" forKey:@"stockName"];    [stockForKVO setValue:@"10.0" forKey:@"price"];            [stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];           UIButton *b = [UIButton  buttonWithType:UIButtonTypeRoundedRect];    self.button = b;    b.frame = CGRectMake(10, 10, 100, 100);    b.backgroundColor = [UIColor redColor];    [b addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:b];        }-(void)buttonClick{    [self.stockForKVO setValue:@"100.0" forKey:@"price"];}-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    if ([keyPath isEqualToString:@"price"]) {        NSLog(@"%@ is ",[self.stockForKVO valueForKey:@"price"]);        NSString *name = [[self.stockForKVO valueForKey:@"price"]stringValue];        //self.myLabel.text = [self.stockForKVO  valueForKey:@"price"];        [self.button setTitle:name forState:UIControlStateNormal];    }}-(void)dealloc{    //[super dealloc];    [self.stockForKVO  removeObserver:self forKeyPath:@"price"];    }@end

#import <Foundation/Foundation.h>@interface StockData : NSObject{    NSString *stockName;    float price;}@end

0 0