This is due to the UIViewController lazy initialization.
The UIViewController view will only be loaded after some one invokes the view property.
like this:
controller.view
So, in your case, you can just call controller.view to self.navBarExtendedFPO = controller.navBarExtendedFPO;
To make the browsing life cycle more understandable, there is an example:
your SLBaseViewController has overridden methods, self.label is the analog of navBarExtendedFPO defined in the XIB file
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { NSLog(@"initWithNibName: view loaded - %d , IBOuttlet loaded - %d", [self isViewLoaded], self.label != nil); } return self; } - (void)loadView { NSLog(@"loadView1: view loaded - %d , IBOuttlet loaded - %d", [self isViewLoaded], self.label != nil); [super loadView]; NSLog(@"loadView2: view loaded - %d , IBOuttlet loaded - %d", [self isViewLoaded], self.label != nil); } - (void)viewDidLoad { NSLog(@"viewDidLoad1: view loaded - %d , IBOuttlet loaded - %d", [self isViewLoaded], self.label != nil); [super viewDidLoad]; NSLog(@"viewDidLoad2: view loaded - %d , IBOuttlet loaded - %d", [self isViewLoaded], self.label != nil); }
and there is a method that creates an SLBaseViewController
SLBaseViewController *testController = [[SLBaseViewController alloc] initWithNibName:@"SLBaseViewController" bundle:nil]; NSLog(@"after initialization: view loaded - %d , IBOuttlet loaded - %d", [testController isViewLoaded], testController.label != nil); UIView * testView = testController.view; NSLog(@"after calling testView.view: view loaded - %d , IBOuttlet loaded - %d", [testController isViewLoaded], testController.label != nil);
So there are our magazines:
initWithNibName: view loaded - 0 , IBOuttlet loaded - 0 after initialization: view loaded - 0 , IBOuttlet loaded - 0 loadView1: view loaded - 0 , IBOuttlet loaded - 0 loadView2: view loaded - 1 , IBOuttlet loaded - 1 viewDidLoad1: view loaded - 1 , IBOuttlet loaded - 1 viewDidLoad2: view loaded - 1 , IBOuttlet loaded - 1 after calling testView.view: view loaded - 1 , IBOuttlet loaded - 1