KVO—监听数组长度的变化

2019-12-19  本文已影响0人  一叶知秋0830

通过KVO监听数组时,当直接通过.语法获取的数组来添加或删除元素时并不会触发KVO,需要通过KVC的方式来获取数组然后再添加或删除元素才会触发KVO

[self.school addObserver:self forKeyPath:@"studentArr" options:NSKeyValueObservingOptionNew context:NULL];

 Student *stu = [[Student alloc] init];
 
 // 通过这种方式添加元素不会触发KVO
[self.school.studentArr addObject:stu];

// 通过这种方式添加元素可以触发KVO,因为KVO原理是对set方法的监听,通过KVC获取到属性值,这样才能观察到数组属性的修改
[[self.school mutableArrayValueForKey:@"studentArr"] addObject:stu];

当然,也可以通过手动触发KVO来解决这个问题:

[self.school willChangeValueForKey:@"studentArr"];
[self.school.studentArr addObject:stu];
[self.school didChangeValueForKey:@"studentArr"];
上一篇 下一篇

猜你喜欢

热点阅读