• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Best way to notify the Controller when one Array object value is changed
[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


  • Subject: Re: Best way to notify the Controller when one Array object value is changed
  • From: "Miguel Coxo" <email@hidden>
  • Date: Wed, 30 Jan 2008 21:16:23 +0000

Ty i will try that and post the result back =)
I did use this one* to notify the Controller of changes, maybe it will also
work for changing just values =).
*
*  "Mutate the result of [self mutableArrayValueForKey:] rather than
directly mutating the array."
*
On Jan 30, 2008 8:07 AM, Ken Thomases <email@hidden> wrote:

> 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
>



--
Cumprimentos, Miguel Coxo.
_______________________________________________

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

  • Follow-Ups:
    • Re: Best way to notify the Controller when one Array object value is changed
      • From: Ken Thomases <email@hidden>
References: 
 >Best way to notify the Controller when one Array object value is changed (From: "Miguel Coxo" <email@hidden>)
 >Re: Best way to notify the Controller when one Array object value is changed (From: Ken Thomases <email@hidden>)

  • Prev by Date: How Do Classes Respond to performSelector?
  • Next by Date: Re: How Do Classes Respond to performSelector?
  • Previous by thread: Re: Best way to notify the Controller when one Array object value is changed
  • Next by thread: Re: Best way to notify the Controller when one Array object value is changed
  • Index(es):
    • Date
    • Thread