Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Best way to notify the Controller when one Array object value is changed



On Jan 29, 2008, at 6:16 PM, Miguel Coxo wrote:

Hello, so i have one ArrayController that is bound to one Array, and a
tablecolumn that is bound to the ArrayController objects (not any particular
value).


As a normal behavior the controller gets notified when i add or remove
objects, but i have a thread that every second updates the objects. What is
the correct way to notify the Controller that a specific object values where
changed?


I'm guessing the Thread shouldn't have direct access to the Controller since
its in a "lower" abstraction layer, so how do i notify or make the
controller track changes to values?


The column is not bound to values because it has custom dataCells that need
several properties from the array objects.

If you modify the array in one of the KVO-compliant ways, then the array controller will be informed automatically. However, you should not do so from a background thread, because the notification will be delivered on whatever thread does the modification, and bindings will attempt to update the GUI from the background thread, which will cause trouble.


You can use performSelectorInMainThread:... to have the background thread push the modification to the main thread. You may not need to use a thread at all. Will an NSTimer meet your needs?

To perform the modification in a KVO-compliant way, you should use one of the following techniques:

a) [self insertObject:in<Key>AtIndex:]

b) [self removeObjectFrom<Key>AtIndex:]

c) [self replaceObjectIn<Key>AtIndex:withObject:]

d) Mutate the result of [self mutableArrayValueForKey:] rather than directly mutating the array.

e)
[self willChange:valuesAtIndexes:forKey:]
// mutate the array directly
[self didChange:valuesAtIndexes:forKey:]

f) Replace the array whole with [self set<Key>:] or [self setValue:forKey:]


-Ken _______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/email@hidden

This email sent to email@hidden
References: 
 >Best way to notify the Controller when one Array object value is changed (From: "Miguel Coxo" <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.