> On 14 Jun 2016, at 16:03, Alastair Houghton <alast...@alastairs-place.net> 
> wrote:
> 
> On 14 Jun 2016, at 05:33, Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote:
>> 
>> But I had:
>> - (void)awakeFromNib 
>> {
>>      self.someUniqueObject = [ [ UniqueObject alloc ] init ];
>> }
>> 
>> The problem: awakeFromNib gets called twice: once before 
>> applicationDidFinishLaunching:, once after.
>> This obviously created a total mess.
> 
> It’s worth highlighting this, actually; -awakeFromNib gets called for the 
> “File’s Owner” object in the nib file, which means if your object has 
> multiple nib files associated with it, it can get called many times.  It’s 
> best (IMO) to always write your -awakeFromNib methods with that in mind 
> (though the documentation recommends trying to maintain a 1:1 correspondence 
> between owners and nib files).

There is just one nib file, owned by (“File’s Owner”) NSApplication.
It contains (among other things) an AppDelegate, referenced as “File’s 
Owner”.delegate and a (view based) TableView.

AppDelegate is not the “File’s Owner” of any nib.

awakeFromNib in AppDelegate is first called (as one of the topLevelObjects in 
the nib) via:
NSApplicationMain → … loadNib … → [NSSet makeObjectsPerform:]

After applicationDidFinishLaunching awakeFromNib is called again, this time 
via: 
NSApplicationMain → [NSApplication run] → [NSWindow layoutIfNeeded] … → 
[NSTableView layout] …→[NSTableRowData unarchiveView…] → [NSNib 
instantiateWithOwner] …

The documentation says: “You might also want to implement [awakeFromNib] for 
any other classes you instantiate directly in your nib file“, which probably 
means the topLevelObjects, like my AppDelegate.

But it does not mention whether these topLevelObjects get awakeFromNib sent 
only once or not.

But no problem, as long one keeps in mind (as you recommended) that 
awakeFromNib “can get called many times”.


Kind regards,

Gerriet.


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to