views:

1249

answers:

3

I have setup tab bar controller using interface builder, and each tab bar item is linked to a view controller (4 tabs, 4 view controllers). I want to know if Interface Builder uses an -init method to initialize the view controller because apparently this method does not get called:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

... and I want to do some initializations. I can't add that to -viewDidLoad since it is recalled in case of memory warning. Any idea?

+4  A: 

Sounds like you want to implement -(void) awakeFromNib.

NSNibAwaking Protocol Reference (requires ADC login)

Ryan Townshend
+11  A: 

Objects loaded from a *.(nib|xib) are inited with:

- (id)initWithCoder:(NSCoder *)inCoder;

So you could override that or if doing your setup after -initWithCoder: is called is not a problem you could use:

- (void)awakeFromNib;

from the NSNibAwaking protocol.

Mark Thalman
+3  A: 

I was also going to mention initWithCoder vs awakeFromNib.

In general, I override initWithCode when allocating memory for the object or setting values. When you need to do some setup after the IBOutlets are connected, then override awakeFromNib. Until then, IBOutlet instance variables to other views and controls are not connected.

Steve Sheets