如何用KVO观察对象的子对象的属性变化

如何用KVO观察对象的子对象的属性变化?
KVO观察多级对象属性变化

#import <Foundation/Foundation.h>
@interface LKPerson : NSObject

@property (nonatomic,copy) NSString *uid;
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *age;

@end

#import "LKPerson.h"
@implementation LKPerson

@end


#import <Foundation/Foundation.h>
#import "LKPerson.h"

@interface LKHomeModel : NSObject

@property (nonatomic, copy) LKPerson *person;

@end

#import "LKHomeModel.h"

@implementation LKHomeModel

- (instancetype)init
{
    self = [super init];
    if (self) {
        _person = [LKPerson new];
    }
    return self;
}

 ///关联person对象的属性变化
+ (NSSet<NSString *> *)keyPathsForValuesAffectingValueForKey:(NSString *)key{
   NSSet *keySet = [super keyPathsForValuesAffectingValueForKey:key];
   if ([key isEqual:@"person"]) {
       NSSet *set = [NSSet setWithObject:@"_person.age"];
       keySet = [keySet setByAddingObjectsFromSet:set];
    }
    return keySet;
}

@end

 //控制器中
 - (void)viewDidLoad {
    [super viewDidLoad];

    _homeModel = [LKHomeModel new];
    _homeModel.person.age = @"000";

    [_homeModel addObserver:self forKeyPath:@"person" options:NSKeyValueObservingOptionNew context:nil];

    _homeModel.person.age = @"111";
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{

      NSLog(@"%@",change);
      NSLog(@"person.age === %@",_homeModel.person.age);

 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容