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


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

  • Prev by Date: insertText: without a NSWindow/NSView (or: Unicode input without NSView/Window)
  • Next by Date: Re: insertText: without a NSWindow/NSView (or: Unicode input without NSView/Window)
  • Previous by thread: 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