From a comment on Return a set of key paths for properties whose values affect the value of the keyed property.When an observer for the key is registered with an instance of the receiving class, KVO itself automatically observes all of the key paths for the same instance, and sends change notifications for the key to the observer when the value for any of those key paths changes.If you manually observe an array controller’s arranged objects key path with the old and new observation options, the change dictionary you will get when an object is inserted will look as following: It thus explains why KVO wasn’t able to send change notifications to observers of a dependent key paths when the array controller’s arranged objects were updated: it was unable to figure out whether the value had changed, being before and after. Even though the change dictionary is not correctly populated, observers are still notified with the content changes.
After spending some time trying to figure out what is going on with your code you might come to the realization that there might be something wrong with . As a good debugger, before jumping to conclusions we will want to analyze the code flow in the working case and try to infer what is preventing it to work in our very special non-working case.
So first thing first, let’s discuss what how dependent keys with KVO actually work.