文档章节

iOS kvo 结合 FBKVOController 的使用

法斗斗
 法斗斗
发布于 2016/12/27 18:53
字数 589
阅读 37
收藏 0

iOS kvo 结合 FBKVOController 的使用

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

改变值之前

改变值之后

本文转载自:

法斗斗
粉丝 23
博文 368
码字总数 17774
作品 0
杨浦
程序员
私信 提问
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
iOS高仿QQ侧滑控件、下载框架、动画效果、扫一扫、颜色变化、K线图等源码

iOS精选源码 仿京东"加入购物车"转场动画(http://www.code4app.com/thread-28162-1-1.html) ColorTool(颜色转换)(http://www.code4app.com/thread-29256-1-1.html) Swift 专业版K线(http://w......

sunnyaigd
2018/04/17
65
0
iOS源码补完计划--AFNetworking(二)

目录 前言 AFNetworkReachabilityManager.h AFNetworkReachabilityManager.m API注释Demo 参考资料 前言 AFNetworking源码第二篇 主要看了看AFNetworkReachabilityManager的内容 作为一个辅助...

kirito_song
2018/05/16
0
0
iphone开发技术要学习的内容

一.iOS基础   1 开发环境搭建以及IOS组件、框架的概要介绍。   2 mac操作系统与iOS操作系统   3 xcode IDE开发环境的初始   二.C语言基础   1数据类型、表达式与控制流程语句   ...

和谐中原植物酒
2015/08/24
155
2
文檔翻譯:NSOperation Class Reference

NSOperation Class Reference NSOperation 類參考 http://db.tt/A1xLPVXq。(排版較佳) 原文網址:http://developer.apple.com/documentation/Cocoa/Reference/NSOperation_class/Referenc......

KSHime
2012/09/18
527
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
80
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部