Re: Best way to notify the Controller when one Array object value is changed
Re: Best way to notify the Controller when one Array object value is changed
- Subject: Re: Best way to notify the Controller when one Array object value is changed
- From: Ken Thomases <email@hidden>
- Date: Wed, 30 Jan 2008 02:07:35 -0600
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:
This email sent to email@hidden