Xcode 4.2 iOS Empty Application and storyboards
Asked Answered
T

3

37

I'm an Xcode newbie, and I'm trying to make my first training app. Since apparently Empty Application template is the only template that offers pre-integrated Core Data, I choose that. However, after that, I can't get UI to work (it remains empty).

What I did:

  • Empty Application template
  • New iPad Storyboard file
  • Splashed Tab Bar Controller onto it
  • Changed Main Storyboard in Project's Summary view
  • Hit ⌘R
  • Stared at pure-white iPad screen, without any tabs

I tried diffing against another project that I created as a Tab Bar Application (which does reflect my Storyboard changes), without any insight.

Townshend answered 26/10, 2011 at 17:33 Comment(0)
B
76

Comment out (or remove) the window creation and display code in AppDelegate.m as follows:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    // self.window.backgroundColor = [UIColor whiteColor];
    // [self.window makeKeyAndVisible];

    return YES;
}

When using a storyboard, a main UIWindow is created for you automatically. What is happening in your case is that you are creating another white window and putting it over the top of the tab UI.

ALSO - note that the Master/Detail template also gives you a core data option.

Bricole answered 26/10, 2011 at 17:48 Comment(4)
Never having seen Master/Detail on iPhone, I figured I couldn't make it Universal... Also, thank you, works perfectly.Townshend
Master/detail is the standard navigation controller-based template used by many iPhone apps.Bricole
Oh. I thought it was navigation + table :) Well, that simplifies things! (I thought master/detail was the thing on iPhone where you get the split view - which I haven't seen on iPhone. Shows how much I know :P )Townshend
It is navigation + table because that's such a typical combination. however, you can strip out the table if you don't want it.Bricole
G
39

For an Empty Application project, you have to do two things, after you've added your Storyboard file...

  1. Add a row to your project Info.plist file:

    Key: Main storyboard file base name
    Value: Storyboard
    

    (or whatever you named your storyboard file)

  2. Delete the contents of application:didFinishLaunchingWithOptions: except return YES;:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        return YES;
    }
    
Grigri answered 12/1, 2012 at 12:18 Comment(1)
Your item 1 is a very important step! Nobody else seemed to mention it, thanks!Schroer
J
9

The Master-Detail and Utility project templates also offer Core Data as an option.

The Apple templates for Core Data are pretty horrible. They stuff far too much functionality into the app delegate and they use lazy loading unnecessarily, which just complicates things even further.

You're better off looking at the generated code and adding the functionality as a separate class in a project you start without Core Data.

To answer your immediate question though, the default empty template creates a window programmatically in the app delegate's application:didFinishLaunchingWithOptions: method. The story board sets a window up itself, so you need to remove that code from the app delegate. The only thing you need in that method is return YES;.

Janitor answered 26/10, 2011 at 17:47 Comment(1)
I normally dislike autogenerated code, but in this case, trying to get into a completely new ecosystem of tools and not knowing what anything does let alone how to make something new by myself, following along with templates still works best :( I'd love to be able to write it myself, but I guess it'll have to wait. BTW: not fair that I can't accept two answers >.<Townshend

© 2022 - 2024 — McMap. All rights reserved.