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

改變值以前

改變值以後

相關文章
相關標籤/搜索