Skip navigation.
 
mlRe: KVO and Object Arrays
FROM : Jake Carter
DATE : Sun Apr 20 18:04:54 2008

Murph,

Thanks for the info. This is a really great place for me to start.

:// Jake

On Apr 20, 2008, at 8:56 AM, Sean Murphy wrote:

> On Apr 20, 2008, at 1:13 AM, Jake Carter wrote:
>

>> So the AppDelegate will contain an array of Foo object and each Foo 
>> object will have an array of Bar objects. I want to be able to 
>> observe the bars from the AppDelegate to see when new bars are 
>> added or when a property changes in each bar object. I know I can 
>> use addObserver:forKeyPath:options:context: and add it to each key 
>> I want to observe, but is there a better way to do this? Maybe some 
>> KVO magic way to watch a whole tree of objects and their properties?

>
> Hey Jake,
>
> Unfortunately, while KVO and bindings can often seem magical, the 
> need to observe changes to properties in an array brings you 
> slightly back to reality, requiring a bit more manual code to be 
> introduced.
>
> In your case, registering AppDelegate as an observer of Foo's array 
> of Bar objects will allow it to receive notification only when 
> objects are added and removed from the Bar array.  Changes to 
> specific attributes of your Bar objects, name and number, do not 
> trigger any notification.
>
> The general approach is to register as an observer of the array 
> itself first, and when notified about the addition of objects, 
> register to observe specific properties in each of them.  You should 
> also pay attention to objects removed from the array, and unregister 
> an an observer of their properties.
>
> Malcolm Crawford has written some excellent documentation about this 
> topic at <http://homepage.mac.com/mmalc/CocoaExamples/

> controllers.html> under the heading "Observing a collection is not 
> the same as observing the properties of the objects in a 
> collection."  Also be sure to take a look at his "Graphics Bindings" 
> example, specifically the observeValueForKeyPath:... and 
> startObservingGraphics: method implementations in GraphicsView.m.
>
> Having your model objects use keyPathsForValuesAffectingValueForKey: 
> (or setKeys:triggerChangeNotificationsForDependentKey: pre 10.5) 
> allows for an elegant way to perform this task, simplifying your 
> controller's registration and observation in cases where you 
> generally need to respond identically to a group of properties no 
> matter which specific one was modified.
>
> Hope that helps,
> -Murph.
>

Related mailsAuthorDate
mlKVO and Object Arrays Jake Carter Apr 20, 07:13
mlRe: KVO and Object Arrays Sean Murphy Apr 20, 17:56
mlRe: KVO and Object Arrays Jake Carter Apr 20, 18:04