Re: Connecting Outlet on Derived Array Controller
Re: Connecting Outlet on Derived Array Controller
- Subject: Re: Connecting Outlet on Derived Array Controller
- From: Quincey Morris <email@hidden>
- Date: Mon, 1 Mar 2010 10:08:01 -0800
On Mar 1, 2010, at 08:48, Joanna Carter wrote:
> Actually, I don't really want a "dependent" property. All I want is a way to be able to pass a property on the main controller class to each of three derived array controllers, so that they can use that value to set a property on every new item added to the array controller.
>
> At the moment, I am manually passing the value to each of the array controllers in the windowControllerDidLoadNib: method of the main controller.
>
> This is fine but, since I will need to do the same thing in other scenarios, I wanted to create a derived array controller component that I could add to a NIB and setup in IB, rather than having to write the hookup code every time.
>
> - (void)windowControllerDidLoadNib:(NSWindowController *)windowController
> {
> [super windowControllerDidLoadNib:windowController];
>
> [myExtendedArrayController setExtraProperty:[self extraProperty]];
>
> ...
> }
You want to "pass a property"? What does that mean? Never mind -- it's clear from your second paragraph that you mean "pass a value". I'm rudely pointing this out because using precise terms precisely is important, and you've led yourself astray multiple times in this thread by using them imprecisely.
If you don't really want a dependent property, then you certainly don't want a binding. Bindings are a more complicated version of a dependent property.
You can achieve what you said above very simply. The cheap version goes like this:
-- Add an IBOutlet to your NSArrayController subclass. Call it (say) owningWindowController. Or anything you like that doesn't conflict with an existing name.
-- When you instantiate one of these custom array controllers in IB, connect its owningWindowController outlet to File's Owner.
-- In your custom array controller's awakeFromNib method, do the following:
myExtraProperty = [owningWindowController extraProperty];
That's it.
The classy version is only slightly more complicated:
-- Define a protocol. Call it (say) extraPropertyProviderProtocol. The protocol contains just one thing, the "extraProperty" property definition.
-- Have your window controller formally adopt the protocol. (It already implements it.)
-- Declare your custom array controller outlet as IBOutlet NSObject<extraPropertyProviderProtocol>* extraPropertyProvider.
-- Connect the outlet to File's Owner, as before.
-- In your custom array controller's awakeFromNib method, do the following:
myExtraProperty = extraPropertyProvider.extraProperty;
That way, File's Owner isn't unnecessarily constrained to be a particular class of object. It can be any object that conforms to the protocol.
_______________________________________________
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