自动触发场景:在注册 KVO 之前设置一个初始值,注册之后,设置一个不一样的值,这样就可以触发了。
手动触发:
.m文件
//手动触发 value 的 KVO ,最后两行代码缺一不可
@property (nonatomic, strong) NSDate *now;
- (void)viewDidLoad{
[super viewDidLoad];
_now = [NSDate date];
[self addObserver:self forKeyPath:@"now" options:NSKeyValueObservingOptionNew context:nil];
NSLog(@"1");
[self willChangeValueForKey:@"now"];//手动触发self.now的KVO,必写。
NSLog(@"2");
[self didChangeValueForKey:@"now"];//手动触发self.now的KVO,必写。
NSLog(@"4");
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
NSLog(@"3");
}
网友评论