ios KVO

**ViewController**
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()

//首先要有一個類,kvo是監聽 某個類 的 某個屬性 的值變化
@property (nonatomic, retain) Person *person;  //定義一個屬性
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];

//*******  KVC : key value code  鍵值編碼 ,間接給屬性賦值 ***********************
    //    kvc 還能間接給系統屬性賦值, 還可以用kvc給系統只讀的屬性賦值
    [self.view setValue:[UIColor orangeColor] forKey:@"backgroundColor"];

    self.person = [[Person alloc]init];
    [self.person setValue:@"林翰" forKey:@"name"];  // 給屬性賦值
    [self.person setValue:@"23" forKeyPath:@"age"]; // 根據路徑給屬性賦值
//    [self.person setValue:@"馬強" forKeyPath:@"stu.stuName"];

//  ********  KVO : key value observing 鍵值觀察者 *****************
//    是用來觀察屬性值變化的,不僅僅可以觀察自定義類的屬性,也可以觀察系統屬性值變化

//    註冊當前類對象爲觀察者, 觀察Person屬性變化
//    參數1: 設置觀察者 self
//    參數2: 設置觀察屬性
//    參數3: 觀察值的狀態
//    參數4: 設置觀察值的內容
    [self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:@"觀察Person的name值"];

}
// 點擊按鈕更改 屬性值
- (IBAction)kvoButton:(UIButton *)sender {
    [self.person setValue:@"大哥" forKey:@"name"];
}
// 當前屬性值發生變化時觸發的方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    NSLog(@"\n\n\n");

    if ([keyPath isEqualToString:@"name"]) {
        NSLog(@"keyPath = %@", keyPath);
        NSLog(@"object = %@", object);
        NSLog(@"change = %@", change);
        NSLog(@"context = %@", context);
    }

}
**Person 類**
person.h文件裏
#import <Foundation/Foundation.h>
#import "Student.h"
@interface Person : NSObject

@property (nonatomic, copy) NSString *name; /**< Preson姓名 */
@property (nonatomic, assign) NSInteger age; /**< 年齡 */


@end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章