如果我通过KVO观察集合,我是否收到了集合中对象更改的通知?

时间:2016-02-25 02:44:17

标签: ios objective-c cocoa-touch key-value-observing

我假设没有,但总是喜欢仔细检查。

我们说我有一个NSMutableArray我是KVObserving。它拥有一堆Employee对象。如果我完全分配数组,那么毫无疑问我会观察到这一变化。但是,如果我更改了数组中的一个Employee对象引用/值/对象,例如employee.salary,该怎么办?

我认为没有KVO通知,这里正确吗?

如果你想要这样的东西,它将如何实现?

2 个答案:

答案 0 :(得分:1)

一个快速的挑剔:你不能成为观察NSMutableArray的关键值。这不是KVO所做的。你所做的是关键价值观察某些对象的某些属性(比如“员工”)。该属性可以输入NSMutableArray(虽然这是一个可怕的想法)或仅仅由NSMutableArray支持。但你没有观察阵列。您正在观察对象的employees属性中的更改。

观察集合属性的键值观察集合中对象的属性。一般来说,没有办法观察任何物体的所有属性。

如果要观察集合中对象的某些特定属性或属性,则应该:

  1. 将该集合的所有突变整合为单独的方法。您应该已经这样做,以使您的employees属性符合KVO标准。特别是,我建议您实现索引集合变异访问器。
  2. 在这些方法中,使用-addObserver:toObjectsAtIndexes:forKeyPath:options:context:-removeObserver:fromObjectsAtIndexes:forKeyPath:context:来开始和停止观察要添加到集合或从集合中删除的元素的一些关键路径。您需要在-setEmployees:属性的setter(employees)中执行此操作(停止观察旧数组的所有元素,将其替换为新数组,开始观察所有元素新数组)。
  3. 不要忘记在释放数组之前停止观察元素,例如在-dealloc中。

答案 1 :(得分:0)

试试这个:

[[employee mutableArrayValueForKey:@"salary"] addObject:...]