IBOutlet instances are (null) after loading from NIB

iboutlet, ios, null, objective-c, retain

Solution

I guess asking the question after looking at the problem for over an hour led me to figure it out:

I just changed my code to check the text box AFTER displaying the view... now everything is instantiated.

Imagine that: the UI elements aren't instantiated until you display them!

Problem

I am working on an iPhone app and am getting (null) references to IBOutlet fields in my controller. I have a UIViewController subclass that is set as the File's Owner in my XIB. I have a set of UI elements that are wired into the controller. After loading from NIB and attempting to set properties on those UI elements, I find that they are (null). To clarify, some code: ExpandSearchPageController.h: ``` @interface ExpandSearchPageController : UIViewController { IBOutlet UITextView * completeMessageView; } -(void)checkTextField; @property (nonatomic, retain) IBOutlet UITextView * completeMessageView; ``` ExpandSearchPageController.m: ``` @implementation ExpandSearchPageController @synthesize completeMessageView; -(void)checkTextField { NSLog(@"text field: %@",completeMessageView); } ``` ExpandSearchPageController is set as the File's Owner for ExpandSearchPage.xib. ExpandSearchPage.xib's UITextView is wired to the completeMessageView. When I call ``` ExpandSearchPageController * searchExpanderPage = [[ExpandSearchPageController alloc] initWithNibName:@"ExpandSearchPage" bundle:[NSBundle mainBundle]]; [searchExpanderPage checkTextField]; ``` the result is ``` "text field: (null)" ```

Original source