ios kvo 要引入_iOS kvo 结合 FBKVOController 的使用

iOS kvo 结合 FBKVOController 的使用

一:FBKVOControlloer是FaceBook开源的一个 在 iOS,maxOS上使用 kvo的 开源库;

提供了block和@selector(SEL) 的回调操作,很方便实用;

二:示例:

fbKVO = [FBKVOController controllerWithObserver:self];

[fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) {

//NSLog(@"%@ %@ %@",observer,object,change);

//Person *p = (Person *)object;

//self.title = p.pName;

self.title = change[NSKeyValueChangeNewKey];

}];

三:流程操作

1:创建 Person Object

#import

@interface Person : NSObject

@property (nonatomic,strong)NSString *pName;

@end

2: 下载FBKVOController---导入FBKVOController.h   .m文件   ARC环境

#import "FBKVOController.h"

#import "Person.h"

3:创建Person对象(被观察者),及FBKVOController对象(管理观察者与被观察者);

@interface RootViewController ()

{

Person *personOne;

FBKVOController *fbKVO;

}

- (void)viewDidLoad

{

[super viewDidLoad];

self.title = @"TEST";

listArray = [[NSMutableArray alloc]initWithCapacity:5];

[listArray addObject:@"FBKVOController"];

personOne = [[Person alloc]init];

personOne.pName = @"defaultName";

fbKVO = [FBKVOController controllerWithObserver:self];

[fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) {

//NSLog(@"%@ %@ %@",observer,object,change);

//Person *p = (Person *)object;

//self.title = p.pName;

self.title = change[NSKeyValueChangeNewKey];

}];

/**

一:kvo值检测类型;

1: NSKeyValueObservingOptionNew 传递变化之后的值;

2: NSKeyValueObservingOptionOld 传递变化之前的值;

3: NSKeyValueObservingOptionInitial 观察者会在程序初始时,也就是观察变化之前,优化执行一次 观察动作;即上述执行上面 block操作一次;并且传递 默认的值,和以后传递 变化后的值;

4: NSKeyValueObservingOptionPrior 会调用两次观察者操作,值改变之前,值改变之后;

二:获取 kvo的值;

change[NSKeyValueChangeNewKey] 新值;

change[NSKeyValueChangeOldKey] 旧值;

*/

}

4:添加改变 被观察者 Person的pName属性值变化操作,然后在 观察者观察到 pName值发生变化时,改变 self.title的值

#pragma mark action 点击

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

[tableView deselectRowAtIndexPath:indexPath animated:YES];

int nums = arc4random()%10;

personOne.pName = [NSString stringWithFormat:@"newName%d",nums];

NSLog(@"new --> %@",personOne.pName);

}

//在 pName属性值发生变化时,改变self.title的值;

[fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) {

//NSLog(@"%@ %@ %@",observer,object,change);

//Person *p = (Person *)object;

//self.title = p.pName;

self.title = change[NSKeyValueChangeNewKey];

}];

5:如果想移除观察者:

//三种方式任你选择;

[fbKVO unobserve:personOne];

[fbKVO unobserve:personOne keyPath:@"pName"];

[fbKVO unobserveAll];

6: 效果:

改变值之前

改变值之后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值