It’s odd to be setting your window’s rootViewController
in application:didFinishLaunchingWithOptions:
if you have a MainWindow.xib
. Usually a project follows one of three templates:
-
Some projects have a
MainWindow.xib
. The target’s “Main Interface” is set to “MainWindow” in the target’s Summary tab (or in its Info.plist). This xib’s File’s Owner isUIApplication
. The xib contains an instance ofAppDelegate
, connected to the File’s Owner’sdelegate
outlet. The xib also contains aUIWindow
, whoserootViewController
outlet is connected to aUIViewController
(or subclass, such asUINavigationController
), which is also in the xib. By the time the application delegate receives theapplication:didFinishLaunchingWithOptions:
message, the xib is entirely loaded, so the window and its root view controller are already set up. -
Other projects don’t have a
MainWindow.xib
. The target’s “Main Interface” is empty. Instead, theUIApplicationMain
function creates an instance ofAppDelegate
, sets it as theUIApplication
‘s delegate, and sends it theapplication:didFinishLaunchingWithOptions:
message. The app delegate handles that message by creating aUIWindow
, creating a view controller (or several), and setting the window’srootViewController
property. The default version looks like this:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
-
Some projects have a
MainStoryboard.storyboard
. I’m not going to describe this in detail because it doesn’t seem relevant to your problem.
The problem you’re describing makes it sound like you’re using half of the first template, and half of the second template. That won’t work. You need to decide which approach you’re taking, and go all-in.