FBKVOController的使用

转自:http://www.cnblogs.com/cocoajin/p/3600634.html

iOS kvo 结合 FBKVOController 的使用

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

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

   https://github.com/facebook/KVOController

二:示例:

1
2
3
4
5
6
7
8
9
10
11
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

1
2
3
4
5
6
7
#import <Foundation/Foundation.h>
 
@interface  Person : NSObject
 
@property  ( nonatomic ,strong) NSString  *pName;
 
@end

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

1
2
#import "FBKVOController.h"
#import "Person.h"

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

1
2
3
4
5
@interface  RootViewController ()
{
     Person *personOne;
     FBKVOController *fbKVO;
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
- ( 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的值

1
2
3
4
5
6
7
8
9
10
11
#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的值;

1
2
3
4
5
6
7
8
9
10
[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:如果想移除观察者:

1
2
3
4
//三种方式任你选择;
[fbKVO unobserve:personOne];
[fbKVO unobserve:personOne keyPath:@ "pName" ];
[fbKVO unobserveAll];

  

6: 效果:

改变值之前

改变值之后

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值