我假设没有,但总是喜欢仔细检查。
我们说我有一个NSMutableArray我是KVObserving。它拥有一堆Employee对象。如果我完全分配数组,那么毫无疑问我会观察到这一变化。但是,如果我更改了数组中的一个Employee对象引用/值/对象,例如employee.salary,该怎么办?
我认为没有KVO通知,这里正确吗?
如果你想要这样的东西,它将如何实现?
答案 0 :(得分:1)
一个快速的挑剔:你不能成为观察NSMutableArray
的关键值。这不是KVO所做的。你所做的是关键价值观察某些对象的某些属性(比如“员工”)。该属性可以输入NSMutableArray
(虽然这是一个可怕的想法)或仅仅由NSMutableArray
支持。但你没有观察阵列。您正在观察对象的employees
属性中的更改。
观察集合属性的键值不观察集合中对象的属性。一般来说,没有办法观察任何物体的所有属性。
如果要观察集合中对象的某些特定属性或属性,则应该:
employees
属性符合KVO标准。特别是,我建议您实现索引集合变异访问器。-addObserver:toObjectsAtIndexes:forKeyPath:options:context:
和-removeObserver:fromObjectsAtIndexes:forKeyPath:context:
来开始和停止观察要添加到集合或从集合中删除的元素的一些关键路径。您需要在-setEmployees:
属性的setter(employees
)中执行此操作(停止观察旧数组的所有元素,将其替换为新数组,开始观察所有元素新数组)。-dealloc
中。答案 1 :(得分:0)
试试这个:
[[employee mutableArrayValueForKey:@"salary"] addObject:...]