Re: Passing References During Initialization / Nib Loading
Re: Passing References During Initialization / Nib Loading
- Subject: Re: Passing References During Initialization / Nib Loading
- From: Brad Gibbs <email@hidden>
- Date: Thu, 11 Jun 2009 17:32:02 -0700
hmm... Sounds like a clever solution.
On Jun 11, 2009, at 4:30 PM, Kyle Sluder wrote:
On Thu, Jun 11, 2009 at 3:53 PM, Brad Gibbs<email@hidden> wrote:
I have a single window application. It's a Core Data, non-document-
based
app. At launch, the appDelegate loads the mainWindowController,
which
controls the app's only window. In the main window, there are
three views
-- a status bar across the top, a menu view down the left side
(Jonathan
Dann's Animating Outline View embedded in a view, rather than a
window) and
a content view, which takes up the rest of the main window. The
mainWindowController loads initial views for these containers.
It sounds like you've got a standard master-detail interface going on
here. In this case, the master view typically doesn't change, and so
does not need to exist in a separate nib. Since your window can't
really exist without that view, you gain nothing by lazily loading it.
Same with the status bar.
It does sound like a fairly standard master-detail view, although the
menu items in each view of the animating outline view (the number of
view controllers and views) will change at runtime. Is your
suggestion predicated upon having the menu view in the main window
controller's nib? If so, I'll have to look at this more closely to
figure out how to make it happen. The animating outline view code
loads the viewControllers in code, rather than using nib files.
In each section of the menu (the outline view) is a table view with
a single
column, which lists the titles for the view controllers. For the
most part,
a single view controller controls a single view, which is displayed
in the
content view portion of the main window. These view controllers are
subclasses of a custom subclass of NSViewController with variables
for the
main managedObjectContext and the mainWindowController.
NSViewController has a representedObject binding. You should add a
property to your window controller called managedObjectContext and set
up your view controllers such that their represented object is the
window controller. This is what we do in document-based applications,
except we have the extra step of going through the window controller
to get to the persistent document's managedObjectContext property.
When / where do I set the representedObject? I don't see an exposed
binding for representedObject in IB and if I don't set it in IB, it
seems as though I'm back to the chicken-or-egg problem I'm try to work
my way out of...
The method call to remove the view currently in the content view
portion of
the main window and replace it with the new view controller's view
is in the
main window controller.
"Method Call" means? Are you saying your window controller subclass
has a method that looks something like -switchToContentViewController:
? Because that's exactly what you should be doing.
Yes, that's what I meant.
I had been manually instantiating the view controllers and passing
references to the main window controller and the main managed
object context
with a custom init method ( initWithMoc: andWindowController:) and
using
these arguments to set variables in the view controllers. Today, I
decided
to try to refactor and clean up some code by instantiating the view
controllers in nibs, but I ran into the problem I'm trying to
describe.
The view controllers are very similar to window controllers. They
should be the File's Owner of the nibs. You instantiate the view
controllers in your window controller's initializer (the view
controller takes care of lazily loading its nib).
Put all this together and your view controller subclasses (if you even
need to subclass them) don't need to have a reference the view
controller. The standard -[NSViewController representedObject]
property will be more than sufficient to get from your view controller
or view objects back at both your window controller and its MOC.
Don't need a reference to the view controller? or the main window
controller?
Yes, I'm using 10.6, but I think the problem can be abstracted
enough to be
discussed without breaking the NDA.
There's nothing substantively different about this on 10.6 than on
10.5. If you're at WWDC, hit me up and I'll explain in person. Ask
anyone in an Omni jacket if they've seen me.
--Kyle Sluder
_______________________________________________
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