iOS kvo 结合 FBKVOController 的使用

iOS kvo 结合 FBKVOController 的使用

iOS kvo 结合 FBKVOController 的使用html

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

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

   https://github.com/facebook/KVOControllerdom

二:示例:优化

1atom

2spa

3.net

4code

5orm

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: 效果:

改变值以前

改变值以后

相关文章
相关标签/搜索