Multiple invocations of awakeFromNib on a single instance?
Multiple invocations of awakeFromNib on a single instance?
- Subject: Multiple invocations of awakeFromNib on a single instance?
- From: Evan Coyne Maloney <email@hidden>
- Date: Thu, 24 Jan 2002 15:37:48 -0500
I seem to be experiencing some odd (or at least undocumented) behavior with
the awakeFromNib message.
First, the background:
I have two NIB files. One is my main NIB, MainMenu.nib. Another is a NIB
(ParseRules.nib) that contains an ancillary view (ParseRulesCriterionView)
, which may be loaded multiple times and added as subviews to a window
(ParserWindow) defined in MainMenu.nib.
Further, I have a controller (ParseWindowController) for ParserWindow that
is instantiated in MainMenu.nib; I am using ParseWindowController as the
File's Owner for ParseRules.nib.
Within ParseRules.nib, I have another controller (ParseRulesController)
that has an outlet to File's Owner, which is set to be of the class
ParseWindowController.
(The way my program works, the user sets parsing rules by selecting
controls in the ParseRulesCriterionView. Whenever one criterion is set, my
program loads the ParseRules.nib to get a new set of controls, allowing the
user to set more criteria if desired. Each noew ParseRulesCriterionView
that gets loaded is added as a subview immediately below the previous
criterion.)
I am sending the following message from within my ParseWindowController
whenever I need to load another instance of the ParseRules.nib file:
[NSBundle loadNibNamed:PARSERULES_NIB owner:self];
(In other words, the "self" refers to my instance of ParseWindowController,
of which there is only one.)
What I'm noticing is that my ParseWindowController instance is receiving an
awakeFromNib message whenever it loads ParseRules.nib, even though
ParseWindowController is not instantiated in ParseRules.nib; it is ONLY
defined as the "File's Owner" for ParseRules.nib. The controller within
ParseRules.nib, ParseRulesController, DOES have an outlet to
ParseWindowController.
From what I understand, awakeFromNib is ONLY called on an instance when
that instance is decoded from the NIB; I have NOT seen anything indicating
that awakeFromNib will ALSO be called on an instance that's acting as a
File's Owner when loading another NIB.
Have I found a bug? Or is awakeFromNib supposed to be called in this
fashion?
If this IS the correct behavior of awakeFromNib, is there another message
I can handle if I want to do one-time initialization when an object is
decoded from the NIB? (I am currently allocating NSMutableArrays within my
awakeFromNib, and this is causing a problem, since my arrays are getting
overwritten when the second awakeFromNib is sent. Obviously, I can create
a flag along the lines of "alreadyAllocatedArrays" to work around this, but
I'd rather understand what's really going on before I hack around the
problem.)
Thanks in advance for your insight!
Evan Coyne Maloney____________________________________________________
The six-legged fire-breathing dog email@hidden